Що мені потрібно знати, якщо я хочу написати програму, яка працюватиме на будь-якому дистрибутиві Linux?


15

Я планую написати додаток, яке хотів би мати можливість працювати на будь-якій установці Linux без необхідності переписувати будь-який код при цьому (крім, можливо, інтерфейсу, GNOME проти KDE тощо).

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


відкритий чи власницький? складений чи інтерпретований?
ксенотеррацид

з відкритим кодом та складений.

добре, тоді вам не доведеться турбуватися про те, щоб написати якийсь невеликий додаток / makefile чи щось таке, що дозволить відновити вашу програму, як це робить Oracle
xenoterracide

Відповіді:


10

Деякі моменти, які слід пам’ятати при розробці,

  1. Використовуйте стандартну систему побудови
  2. Уникайте жорстких кодувань бібліотечних шляхів
  3. використовувати pkg-configзамість цього інструменти, як знайти зовнішні пакети.
  4. Якщо у вашій програмі є графічний інтерфейс, використовуйте деякі рамки, на зразок wxWidgetsяких можуть відображатись початкові елементи інтерфейсу, залежно від місця запуску.
  5. Уникайте створення залежностей від пакетів, які не працюватимуть на інших дистрибутивах.

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

Я думаю, що ви не можете занадто сильно узагальнити розгортання програми, оскільки кожен дистрибутив використовує різний спосіб встановлення пакетів. Debian використовує debта Fedora rpm.


3
просто уникайте жорстких шляхів кодування, найбільша різниця між ВСІМ дистрибутивами - це їхній менеджер пакунків і те, куди вони розміщують речі. Припустимо, що вони будуть розміщувати кожен окремий файл і каталог в іншому місці від вас.
ксенотеррацид

2

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

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


2

Якщо ви пишете для невбудованого Linux, головне пам’ятати, що різні дистрибутиви матимуть різну колекцію бібліотечних версій. Отже, вам слід встановити досить стару базову лінію. Оскільки Debian оновлюється повільно, стабільний Debian (або старий, коли він існує, через кілька місяців після випуску), як правило, є розумним вибором.

Вам потрібно буде упакувати окремо для кожної дистрибуції. Якщо ваша заявка з відкритим кодом і взагалі успішна, ви можете розраховувати на те, що хтось підніме її та надасть упаковку, тому це не є необхідним навиком. За винятком упаковки, відмінності між дистрибутивами в основному впливають на адміністрування системи, а не на розвиток або щоденне використання.

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

Зауважте, що те, що я писав вище, не відповідає дійсності, якщо ви хочете, щоб ваша програма працювала у вбудованих системах (тут мається на увазі все, що не є сервером, настільним ПК чи ноутбуком), які навіть коли вони працюють за допомогою ядра Linux, часто не мають звичних бібліотек, починаючи з Glibc час уникали на користь μClibc , dietlibc , Bionic і т.д.


1

Я вважаю це Linux Standards Baseкорисним, особливо коли у вашу заявку входять послуги (демони). Перегляньте деякі з цих сайтів:

Але якби мені довелося обмежитися лише ресурсом, це може бути Стандарт ієрархії файлів .


0

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


0

Головне - вибір мови. На якій мові це буде працювати? Якщо ви дійсно хочете запустити будь-який дистрибутив Linux, ви можете написати це в Python. Будь-яка програма python, яка працюватиме на Linux, буде (в основному) запускатись на будь-якому дистрибутиві Linux із 0 модифікаціями.

У Python також є дуже приємні в'яжучі GTK та Qt. Я ніколи не працював з gtk, але з PyQt дійсно чудово працювати.

Переваги python полягають у тому, що вам, мабуть, не знадобиться збирати будь-які розширення (це повністю залежить від того, що ви пишете. Навіть якщо вам це потрібно, це досить просто.), А також у вас є чудове джерело розповсюдження через pypi . Встановити програми python звідти зазвичай навіть простіше, ніж сховище пакетів дистрибутивів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.