Переносність програмного забезпечення

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Відеоігри, що працюють на різних апаратних платформах.

Комп'ютерну програму називають портативною, якщо для її запуску на різних платформах потрібно дуже мало зусиль. Необхідною умовою переносимості є узагальнена абстракція між логікою програми та системними інтерфейсами. Коли програмне забезпечення з однаковою функціональністю виробляється для кількох обчислювальних платформ, переносимість є ключовою проблемою для зниження витрат на розробку.

Стратегії портативності[ред. | ред. код]

Переносність програмного забезпечення може включати:

  • Перенесення встановлених програмних файлів на інший комп’ютер з практично такою ж архітектурою.
  • Перевстановлення програми з файлів дистрибутива на іншому комп’ютері з такою ж архітектурою.
  • Створення виконуваних програм для різних платформ з вихідного коду; це те, що зазвичай розуміють під «портуванням».

Подібні системи[ред. | ред. код]

Часто передача файлів, що реалізовані програмними файлами, можлива між двома комп'ютерами з операційними системами одного сімейства та з процесорами, що мають подібні набори інструкцій.

У найпростішому випадку файл або файли можна скопіювати з однієї машини на іншу. Однак у багатьох випадках програмне забезпечення встановлюється на комп’ютер способом, який залежить від його обладнання, програмного забезпечення та налаштування, з драйверами пристроїв для певних пристроїв, з використанням встановленої операційної системи та допоміжних програмних компонентів, а також з використанням різних дисків або каталогів.

У деяких випадках портативне програмне забезпечення розроблене для роботи на різних комп’ютерах із сумісними операційними системами та процесорами без машинозалежної установки. Перенесення — це не більше, ніж передача визначених каталогів та їхнього вмісту. Програмне забезпечення, встановлене на портативних накопичувачах (таких як USB-накопичувачі) можна використовувати на будь-якому сумісному комп’ютері, підключивши накопичувач, зберігає всю інформацію про налаштування на знімному пристрої. Інформація про апаратне та програмне забезпечення часто зберігається у файлах конфігурації у визначених місцях (наприклад, у реєстрі на машинах під керуванням Microsoft Windows).

Програмне забезпечення, яке не є портативним, потрібно буде передати із змінами для підтримки середовища на кінцевій машині.

Процесори[ред. | ред. код]

Станом на 2011 більшість настільних та портативних комп'ютерів використовували мікропроцесори сумісні з 32- і 64-розрядними наборами інструкцій x86. Менші портативні пристрої використовують процесори з різними та несумісними наборами інструкцій, наприклад, ARM. Різниця між більшими та меншими пристроями в тому, що детальна робота програмного забезпечення відрізняється; програму, розроблену для належного відображення на великому екрані, неможливо просто перенести на кишеньковий смартфон з крихітним екраном, навіть якщо функціональність подібна.

Вебзастосунки мають бути незалежними від процесора, тому переносимість може бути досягнута за допомогою методів веб-програмування, написання на JavaScript. Така програма може працювати в звичайному веббраузері. Такі вебпрограми, з міркувань безпеки, мають мати обмежений контроль над головним комп’ютером, особливо до читання та запису файлів. Невебпрограми, встановлені на комп’ютер звичайним чином, можуть мати більший контроль, але досягати портативності системи, підключаючись до портативних бібліотек, що забезпечують однаковий інтерфейс у різних системах.

Переносність вихідного коду[ред. | ред. код]

Програмне забезпечення може бути зібране та зв’язане з вихідного коду для різних операційних систем і процесорів, якщо воно написано мовою програмування, що підтримує компіляцію для платформ. Зазвичай це завдання для розробників програми; звичайні користувачі не мають ані доступу до вихідного коду, ані необхідних навичок.

У середовищах з відкритим кодом (наприклад, Linux) вихідний код доступний для всіх. Раніше він часто розповсюджувався в стандартизованому форматі та міг бути вбудованим у виконуваний код зі стандартним інструментом Make для конкретної системи серед помірно обізнаних користувачів, якщо під час збірки не траплялося помилок. Деякі дистрибутиви Linux поширюють програмне забезпечення користувачам у вихідній формі. У цих випадках, зазвичай, немає потреби в детальній адаптації програмного забезпечення для системи; воно поширюється таким чином, що змінює процес компіляції відповідно до системи.

Спроби перенести вихідний код[ред. | ред. код]

Навіть з такими портативними мовами, як C і C++, спроби перенесення вихідного коду можуть значно відрізнятися. Автори UNIX/32V (1979) повідомили, що «оболонка Борна [...] вимагала найбільших зусиль для перетворення будь-якої нібито переносної програми з тієї простої причини, що вона не переносна».[1]

Іноді спроби полягають у перекомпіляції вихідного коду, але іноді необхідно переписати основні частини програмного забезпечення. Багато специфікацій мови описують поведінку, визначену реалізацією (наприклад, зсув управо цілого числа зі знаком у C може здійснювати логічний або арифметичний зсув). Функції операційної системи або сторонні бібліотеки можуть бути недоступними в цільовій системі, а можуть бути доступними, але демонструвати дещо іншу поведінку (наприклад: utime() не працює у Windows з EACCES, коли він викликається для каталогу). Сам програмний код також може містити непереносимі речі, як-от шляхи включених файлів. Не всі операційні системи приймають літери дисків і зворотну риску \ як роздільник шляху. Реалізація визначених речей, таких як порядок байтів і розмір цілого числа, також може збільшити важкість перенесення. На практиці вимоги мов, таких як C і C++, на наявність WOCA (пишіть один раз, компілюйте де завгодно ) є спірним.

Дивіться також[ред. | ред. код]

Джерела[ред. | ред. код]

  1. Thomas B. London and John F. Reiser (1978). A Unix operating system for the DEC VAX-11/780 computer. Bell Labs internal memo 78-1353-4.