Linux Standard Base, чи LSB, — спільний проєкт кількох дистрибутивів GNU/Linux з організацією Linux Foundation, метою якого є стандартизація внутрішньої структури операційних систем, заснованих на Linux. LSB спирається на існуючі специфікації, такі як POSIX, Single UNIX Specification, та інші відкриті стандарти, розширюючи і доповнюючи їх.

Згідно з проголошеною метою проєкту:

Щоб сертифікувати програмний продукт на сумісність зі стандартом LSB, потрібно пройти сертифікаційну процедуру, яка проводиться The Open Group, що співпрацює з Free Standards Group.

LSB специфікує: стандартні бібліотеки, декілька команд і утиліт на додаток до стандарту POSIX, структуру ієрархії файлової системи, рівні запуску і різні розширення системи X Window System. LSB забезпечує сумісність між застосунками і операційною системою Linux, що дозволяє розробникам застосунків охоплювати різні дистрибутиви Linux, підготувавши для них єдиний інсталяційний пакет. Відштовхуючись при оформленні програмних продуктів від вимог LSB, виробники ПЗ можуть уніфікувати процес розробки застосунків і уникають необхідності стежити за комплектацією різних дистрибутивів Linux, поточними версіями бібліотек і програмних модулів. LSB також дозволяє постачальникам різних дистрибутивів продемонструвати своїм клієнтам, що їхній дистрибутив відповідає загальному набору стандартів для галузі, і що вони разом працюють над просуванням Linux. LSB виконує важливу роль щодо запобігання фрагментації дистрибутивів Linux, незважаючи на різноманіття яких, базовий бінарний інтерфейс (ABI) дистрибутивів вдається стримувати в певному незмінному руслі.

Крім безпосередньо специфікацій на ABI-інтерфейс в LSB входить набір засобів для тестування і розробки застосунків і дистрибутивів: Linux App Checker - програма, що дозволяє розробникам тестувати їхні програми на предмет сумісності з LSB; LSB SDK — комплект засобів для розробки, що дозволяє створювати виконувані файли, сумісні з LSB; LSB Distribution Checker — засоби для перевірки сумісності дистрибутивів зі специфікаціями LSB.

Потреба в стандартизації Із самого початку операційна система Linux була POSIX-сумісною операційною системою, за винятком невеликого числа окремих невідповідностей. Проте, це не врятувало Linux від проблем з портативністю застосунків і подальшою фрагментацією ринку.

Недоліки POSIX стосовно такої ситуації такі: інтерфейсів, специфікованих в POSIX, виявляється недостатньо для повноцінної розробки всіх видів застосунків. Якщо системні застосунки і застосунки, що взаємодіють з користувачем за допомогою терміналу, можуть бути реалізовані в рамках інтерфейсів POSIX, то застосунки з графічним інтерфейсом користувача, і застосунки, що використовують системну інформацію, виявляються поза стандартом POSIX. опис вимог на рівні вихідного коду вимагає перекомпіляції застосунків. Це не є великою перешкодою при розповсюдженні застосунків з відкритими вихідними кодами, але істотно ускладнює розповсюдження застосунків в двійковому вигляді. У останньому випадку розробникові потрібно мати доступ до всіх підтримуваних дистрибутивів для збірки свого застосунку. Не легко доводиться і кінцевому користувачеві. Оскільки серед постачальників операційної системи Linux немає сталої традиції підтримувати зворотну двійкову сумісність компонентів, то будь-яке оновлення системи може призвести до втрати працездатності окремих застосунків. І навіть в тих випадках, коли застосунок поставляється з вихідними кодами і користувачеві для відновлення його працездатності потрібно тільки виконати перекомпіляцію застосунку, така ситуація не приносить користувачеві нічого окрім додаткового головного болю.

Шлях, яким пішло співтовариство Linux для подолання проблем з портативністю застосунків, полягав в стандартизації базових інтерфейсів операційної системи на бінарному рівні. Для цього в 1998 році була утворена некомерційна організація Free Standards Group, під орудою якої почалася розробка стандарту Linux Standard Base (LSB). Діяльність зі створення стандарту підтримали Лінус Торвальдс, Брюс Перенс, Ерік Раймонд, декілька постачальників дистрибутивів Linux, розробники застосунків, члени Linux International, а також Джон Габбард з проєкту FreeBSD.

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

Всі вимоги стандарту, які не залежать від цільової апаратної платформи, винесені в окремий документ, званий «Загальною специфікацією LSB». Крім того, для кожної підтримуваної платформи створений додатковий документ, що описує вимоги LSB, специфічні для даної платформи. Таким чином, повні набір вимог стандарту LSB для деякої платформи знаходиться в двох документах: у загальній специфікації LSB і в специфікації LSB для цієї платформи.

Стандарт LSB 3.2 підтримує 7 платформ: AMD64 Architecture IA32 — IA-32 Intel Architecture IA64 — Intel Itanium Architecture PPC32 — PowerPC Microprocessor Architecture PPC64 — 64-bit PowerPC Microprocessor Architecture S390 — IBM S/390 Architecture S390X — IBM z/Architecture [S390X].

Стандарт LSB 3.2 складається з модулів: LSB Core, LSB C++, LSB Desktop, LSB Print та LSB Runtime languages. Крім того, існує додатковий, необов'язковий модуль, LSB Qt 4.

LSB Core Базові вимоги вимоги до формату виконуваних файлів; вимоги до базового бінарного інтерфейсу; вимоги до команд і утиліт; вимоги до устрою файлової системи; вимоги до процесу ініціалізації; вимоги до користувачів і груп; вимоги до інсталяції програмного забезпечення.

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

Вимоги до формату виконуваних файлів полягають в наступному. Операційна система зобов'язана підтримувати виконання здійснимих файлів у форматі Executable And Linking Format (ELF) з урахуванням додаткових вимог, сформульованих в стандарті LSB. LSB вимагає підтримки наступних елементів: додаткових типів секцій ELF файлу; формату налагоджувальної інформації DWARF 2.0; версій бінарних символів; процесу динамічного зв'язування.

Вимоги до базового бінарного інтерфейсу операційної системи є одним з ключових елементів стандарту. Стандарт наказує системі містити 12 розподільних бібліотек: інтерпретатор і редактор програм динамічних зв'язків (ld-lsb.so); бібліотека підтримки мови Сі (libc); бібліотека математичних функцій (libm); бібліотека потоків управління POSIX (libpthread); незалежна від мови бібліотека підтримки компілятора gcc (libgcc_s); завантажувач динамічних бібліотек (libdl); бібліотека функцій реального часу (librt); бібліотека функцій криптографії (libcrypt); бібліотека модуля ідентифікації, що настроюється (libpam); бібліотека функцій стиснення даних (libz); бібліотека функцій термінального інтерфейсу (libncurses); бібліотека допоміжних функцій (libutil).

Крім того, для кожної бібліотеки стандарт визначає набір загальнодоступних бінарних символів і описує вимоги до кожного окремого символу. У загальному вигляді вимога до бінарного символу звучить таким чином:

Розробники LSB воліли не дублювати опис функцій, відповідних бінарним символам, якщо в якому-небудь з існуючих стандартів дана функціональність вже специфікована. Замість дублювання тексту вони указують посилання на відповідний стандарт. І навіть якщо функціональність, реалізована в Linux-системах, відмінна від стандартизованої раніше, в LSB зазвичай стоїть посилання на інший стандарт з додатковим описом відмінностей вимог LSB від вимог початкового стандарту.

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

Вимоги до команд і утиліт У стандарті LSB визначають необхідність наявності і правил функціонування 5 команд і 133 утиліт. За своєю структурою опис утиліт нічим не відрізняються від опису утиліт в стандарті IEEE Std 1003.1 (POSIX), оскільки для утиліт не існує відмінності між рівнем початкових кодів і рівнем бінарних кодів.

Вимоги до устрою файлової системи Вимоги до устрою файлової системи стандарту LSB базуються на стандарті Filesystem Hierarchy Standard (FHS) 2.3. На додаток до FHS 2.3 LSB вимагає наявність файлів пристроїв /dev/null, /dev/zero і /dev/tty, а також семи спеціальних директорій в каталозі /etc. Також стандарт LSB регламентує, щоб застосунки використовували для іменування конфігураційних файлів в директорії /etc або короткі імена, зареєстровані в Linux Assigned Names and Numbers Authority (LANANA), або, так звані ієрархічні імена, що включають DNS ім'я, зареєстроване за розробником.

Вимоги до процесу ініціалізації Визначають портативне оточення для скриптів ініціалізації застосунків, які автоматично запускаються при старті та завершенні роботи системи. Це оточення включає: інтерфейс, за допомогою якого застосунки можуть портативно реєструвати та видаляти скрипти ініціалізацій з системи; визначення семантики рівнів виконання (run levels); визначення ідентифікаторів стандартних пристроїв для використання при визначенні залежностей скриптів ініціалізації (наприклад: $local_fs, $network, $remote_fs); набір портативних функцій командного процесора для використання в скриптах ініціалізації.

Вимоги до користувачів і груп Стандарт LSB вимагає визначити трьох обов'язкових користувачів і груп, які зобов'язані бути присутнім у всіх системах, і набір опціональних системних користувачів і груп.

Вимоги до інсталяції програмного забезпечення Призначені для надання можливості портативно реалізувати інсталяцію/деінсталяцію застосунків. Для досягнення цієї мети LSB визначає формат файлу, що містить дистрибутив застосунку як підмножину формату RPMv3 (Red Hat Package Manager), розробленого компанією Red Hat, Inc [RPM30]. При цьому LSB не вимагає використання утиліти rpm або підтримка бази даних RPM, що дозволяє реалізувати LSB-сумісну інсталяцію на основі альтернативних механізмів управління програмним забезпеченням. Крім того, LSB допускає можливість розповсюдження застосунків не тільки у вигляді пакетів RPM, але і в інших формах, за умови, що використовуваний інсталятор розповсюджується разом з застосунком і є LSB-сумісним застосунком.

LSB C++ Містить вимоги наступних видів: представлення C++ даних; правила перетворення ідентифікаторів; бінарний інтерфейс базових бібліотек.

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

LSB Desktop Визначає вимоги до бінарного інтерфейсу бібліотек, призначених для роботи застосунків, орієнтованих на взаємодію з користувачем. До числа цих бібліотек входять: графічні бібліотеки (libX11, libSM, libICE, libXt, libXext, libXi); бібліотеки OpenGL (libGL); бібліотеки PNG (libpng12); бібліотеки JPEG (libjpeg); бібліотеки конфігурації шрифтів (libfontconfig);