Мобільність програмного забезпечення означає підготовленість ПО до переносу з однієї апаратно - операційного середовища в іншу. Переносимість програм і дан-них на різні апаратні та операційні платформи є важ-ним показником функціональної придатності для багатьох сучасних програм. Це властивість може оцінюватися обсягом, трудомісткістю і тривалістю необхідних доробок компонентів ПО і операцій з адаптації, які слід виконати для забезпечення повноцінного функціонує-вання ПО після перенесення на іншу платформу.
Мобільність може здійснюватися на рівні вихідних текстів програм або на рівні об'єктного коду. Вона залежить від структурованості і розширювати-мости комплексів програм і даних, а також від наявності додаткових ресурсів, необхідних для реалізації переносимості і модифікації компонентів при їх перенесенні.
Для написання яку переносять програми потрібно дотримуватись деяких правил. По-перше, велика частина програми повинна бути написана на мові, який є на всіх системах, на які планується надалі її переносити. Це, перш за все, означає, що програма повинна бути написана на мові високого рівня, переважно стандартизованому, на-приклад на мові С. Програма, написана на асемблері, не є в загальному випадку переноситься. По-друге, важливо мінімізувати або, якщо можливо, виключити ті частини коду, які безпосередньо взаємодіють з апарат-ними засобами. Залежність від апаратури може мати багато форм. Неко-торие очевидні форми залежності включають пряме маніпулювання регі-Страм і іншими апаратними засобами. Нарешті, якщо апаратно-залежний код не може бути повністю виключений, то він повинен бути ізольований в не-скількох добре локалізуемих модулях. Апаратно-залежний код не повинен бути розподілений по всій програмі. Наприклад, можна заховати апаратно-зави-сімую структуру в програмно задаються дані абстрактного типу. Інші модулі програми будуть працювати з цими даними, а не з апаратурою, використовуючи набір деяких функцій. Коли ПО переноситься, то змінюються тільки ці дані і функції, які ними маніпулюють.
Введення стандартів POSIX мало на меті забезпечити переносимість створюваного програмного забезпечення.
POSIX (Portable Operating System Interface for Computer Environments) - переносних незалежний системний інтерфейс для комп'ютерного оточення. Це стандарт IEEE, що описує системні інтерфейси для відкритих опера-ційних систем, в тому числі оболонки, утиліти і інструментарії. Крім цього, згідно з POSIX, стандартизованими є завдання забезпечення безпеки, завдання реального часу, процеси адміністрування, мережеві функції і обробка транзакцій. Стандарт базується на UNIX-системах, але допускає реалізацію і в інших ОС.
Цей стандарт детально описує VMS (virtual memory system, систему Вірт-альної пам'яті), багатозадачність (МРЕ, multiprocess executing) і технологію перенесення операційних систем (CTOS). Таким чином, насправді POSIX є безліч стандартів, іменованих POSIX.1 - POSIX.12.
У табл. 4.1 наведені основні напрямки, описувані даними стандартами-тами. Слід також особливо відзначити, що POSIX.1 передбачає мову С як ос-новних мову опису системних функцій API.
Таким чином, програми, написані з дотриманням цих стандартів, будуть однаково виконуватися на всіх POSIX-сумісних системах. Однак стандарт в деяких випадках носить лише рекомендаційний характер. Частина стандартів описана дуже строго, тоді як інша частина тільки поверхнево розкриває основні вимоги. Нерідко програмні системи заявляються як POSIX-сумісні, хоча такими їх назвати не можна. Причини криються в формально-сти підходу до реалізації POSIX-інтерфейсу в різних ОС. На рис. 4.2 з-Браже типова схема реалізації строго відповідного POSIX додатку-ня.
Мал. 4.2. Додатки, строго відповідають стандарту POSIX
З рис. 4.2 видно, що для взаємодії з операційною системою програма використовує тільки бібліотеки POSIX.1 і стандартну бібліотеку RTL мови С, в якій можливе використання лише 110 різних функцій, також опи-санних стандартом POSIX.1.
На жаль, досить часто з метою збільшити продуктивність тієї чи іншої підсистеми або з міркувань введення фірмових технологій, кото-які обмежують використання додатка відповідної операційним середовищем, при програмуванні використовуються інші функції, які не відповідають стандарту POSIX.