Політика зменшення бінарних блобів

Лія Роу

4 січня 2022 року (оновлено 15 листопада 2022 року)


English | Deutsch | українська

попередній індекс

Автор: Лія Роу

дата 4 січня 2022 року (оновлено 15 листопада 2022 року)

Вступ

У цій статті описано принципи, які керують проектом Libreboot. Щоб отримати інформацію про те, як ці принципи застосовуються на практиці, прочитайте натомість цю статтю: Статус свободи програмного та апаратного забезпечення для кожної материнської плати, що підтримується Libreboot

Політика Libreboot полягає в тому, щоб надати настільки, наскільки можливо, свободи кожному користувачу, на кожному підтримуваному апаратному забезпеченні та підтримувати стільки апаратного забезпечення з coreboot, наскільки це можливо; це означає, що ви повинні мати можливість вивчати, змінювати та ділитися всім джерельним кодом, документацією чи іншими подібними ресурсами, які роблять Libreboot таким, яким він є. Простіше кажучи, ви повинні мати контроль над своїми власними обчисленнями.

Мета Libreboot полягає в тому, щоб зробити саме це та допомогти якомога більшій кількості людей, автоматизувавши конфігурацію, компіляцію та встановлення coreboot для нетехнічних користувачів, ще більше спростивши це для звичайного користувача, надаючи користувачам дружні інструкції для всього. По суті, Libreboot - це дистрибутив coreboot, приблизно так само, як Alpine Linux є дистрибутивом Linux!

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

Поточний обсяг проекту

Проект libreboot стосується того, що входить до основної мікросхеми завантажувальної флеш-пам’яті, але є й інші компоненти мікропрограми, які слід взяти до уваги, про що йдеться в поширених запитаннях щодо libreboot.

Найбільш критичні з них це:

Що таке двійковий блоб?

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

Конкретні двійкові блоби також є проблематичними в більшості систем coreboot, але вони відрізняються для кожної машини. Дізнайтесь більше в розділі поширених запитань і на цій сторінці про те, як ми працюємо з двійковими блобами в проекті Libreboot.

Для інформації про Intel Management Engine та AMD PSP зверніться до поширених запитань.

Політика зменшення блобів

Конфігурації за замовчуванням

Coreboot, на якому Libreboot базується, є здебільшого вільним програмним забезпеченням, але на деяких платформах вимагає двійкових блобів. Найпоширенішим прикладом може бути raminit (ініціалізація контролера пам’яті) або ініціалізація кадрового буфера відео. Прошивка coreboot використовує двійкові блоби для деяких з цих завдань, на деяких материнських платах, але деякі материнські плати з coreboot можна ініціалізувати з 100% вільним джерельним кодом, який ви можете перевірити та скомпілювати для свого використання.

Libreboot вирішує цю ситуацію суворо та принципово. Природа цього - це те, що ви збираєтесь прочитати.

Проект libreboot має наступну політику:

Загалом, застосовано здоровий глузд. Наприклад, винятком із мінімізації може бути те, що блоб raminit та вільний raminit доступні, але вільний так зламано, що його не можна використовувати. У такій ситуації натомість слід використовувати той, що з блобом, тому що в іншому випадку користувач може повернутися до повністю пропрієтарної системи замість використання coreboot (через libreboot). Деякі свободи краще, ніж жодних.

Нова прагматична політика Libreboot також може призвести до того, що в майбутньому більше людей стануть розробниками coreboot, виступаючи в якості важливого містка між ним і нетехнічними людьми, яким просто потрібна допомога, щоб розпочати роботу.

Налаштування

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

Цілком природно, що користувач може захотіти створити менш вільний параметр, ніж стандартний у libreboot. Це цілком прийнятно; свобода вище, і її слід заохочувати, але свободу вибору користувача також слід поважати та пристосовуватись до неї.

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

КАТАЛОГ СВОБОДИ

Також має бути доступна сторінка статусу блобів, яка інформуватиме людей про статус бінарних блобів на кожній машині, що підтримується системою збірки Libreboot. Дивіться: Статус свободи програмного та апаратного забезпечення для кожної плати, яка підтримується Libreboot

Бажано бачити світ, де все апаратне та програмне забезпечення є вільним, під тією ж ідеологією, що й проект Libreboot. Обладнання!?

Так, обладнання. RISC-V є чудовим прикладом сучасної спроби вільного апаратного забезпечення, яке часто називають Апаратним забезпеченням з відкритим кодом. Це ISA для виробництва мікропроцесора. Уже існує багато реальних реалізацій, які можна використовувати, і їх буде лише більше.

Таке апаратне забезпечення ще знаходиться в зародковому стані. Ми повинні почати проект, який буде каталогізувати статус різних зусиль, у тому числі на апаратному рівні (навіть на рівні кремнію). Такі рухи, як OSHW і Право на ремонт (Right To Repair), є надзвичайно важливими, включно з нашим власним рухом, який інакше зазвичай менше думатиме про свободу апаратного забезпечення (хоча йому справді, справді варто!)

Одного дня ми житимемо у світі, де будь-хто зможе виготовити власні чіпи, включаючи процесори, а також будь-які інші типи мікросхем. Зусилля зробити домашнє виробництво чіпів реальністю зараз знаходяться в зародковому стані, але такі зусилля існують, наприклад, робота, виконана Семом Зелофом і проектом Libre Silicon:

(Сем буквально виробляє процесори в своєму гаражі)

Проблеми з критеріями RYF

Раніше Libreboot відповідав критеріям FSF RYF, але тепер він дотримується набагато більш прагматичної політики, спрямованої на надання більшої свободи більшій кількості людей у більш прагматичний спосіб. Ви можете прочитати ці вказівки, перейшовши за цією URL-адресою:

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

Повне виключення всього пропрієтарного забезпечення наразі неможливе. Наприклад, пропрієтарне мікропрограмне забезпечення SDR у чіпсетах WiFi, мікропрограмне забезпечення пристроїв AHCI, таких як жорсткі диски або твердотілі накопичувачі тощо. В інструкціях FSF RYF зазначено наступний виняток, щоб пом’якшити цей факт:

та має бути відхилено з ідеологічних міркувань. Решта політики libreboot і загальна ідеологія, виражена в цій статті, базуватиметься в основному на цьому неприйнятті. Визначення програмного забезпечення продукту абсолютно довільне; програмне забезпечення є програмне забезпечення, а програмне забезпечення завжди має бути вільним. Замість того, щоб робити такі винятки, слід заохочувати більше апаратного забезпечення, допомогаючи надавати якомога більше свободи, одночасно надаючи користувачам інформацію про будь-які підводні камені, з якими вони можуть зіткнутися, і заохочувати свободу на всіх рівнях. Коли така організація, як FSF, робить такі сміливі винятки, як вище, вона надсилає неправильне повідомлення, кажучи людям, по суті, заховати ці інші проблеми лише тому, що вони стосуються програмного забезпечення, яке працює на “вторинному процесорі”. Якщо користувач може оновити програмне забезпечення, воно має бути вільним, незалежно від того, передбачав виробник оновлення чи ні. Там де справді не можливо оновити таке програмне забезпечення, пропрієтарне чи ні, слід надати поради щодо цього. Освіта важлива, і критерії FSF активно перешкоджають такій освіті; це створює помилкову надію, що все добре і чудово, лише тому, що програмне забезпечення на одному довільному рівні ідеальне.

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

Вільне програмне забезпечення не існує у вакуумі, але ми мали менше свободи в минулому, особливо коли справа стосувалася апаратного забезпечення, тому ПЗ було нашим основним фокусом.

Здатність вільно вивчати, адаптувати, обмінюватися та використовувати/повторно використовувати ПЗ є важливою, але є багато нюансів, коли справа доходить до завантажувального мікропрограмного забезпечення, нюансів, які здебільшого не існують поза розробкою мікропрограмного забезпечення чи поза розробкою ядра. Більшість типового прикладного/системного програмного забезпечення є високорівневим і портативним, але завантажувальна мікропрограма має бути написана для кожної конкретної машини, і через те, як апаратне забезпечення працює, існує багато компромісів, зокрема FSF, коли визначає які стандарти слід застосовувати на практиці.

Той факт, що майже ніхто не говорить про прошивку EC, пов’язаний із сертифікацією Поважає Вашу Свободу (Respects Your Freedom). Насправді мікропрограмне забезпечення EC має вирішальне значення для свободи користувачів і повинно бути вільним, але FSF повністю ігнорує його як частину апаратного забезпечення. Це неправильно, і FSF має активно заохочувати людей визволяти його на кожному ноутбуці!

Інше мікропрограмне забезпечення, яке наразі не доступне для проекту libreboot, описано на сторінці поширених питань libreboot. Наприклад, прошивка жорстких дисків/твердотілих накопичувачів описана в розділі поширених запитань. Знову ж таки, повністю проігноровано та знизано плечима FSF.

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

Приклади замітання блобів під килим FSF

Протягом багатьох років було багато випадків, коли FSF активно не заохочував рівень свободи програмного забезпечення, наприклад:

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

Проблеми з FSDG

FSF підтримує ще один набір критеріїв, які називаються Правилами вільного розповсюдження системи (GNU FSDG)]

Критерії FSDG відрізняються від RYF, але мають подібні проблеми. FSDG - це те, чому відповідають схвалені FSF дистрибутиви GNU+Linux. По суті, він забороняє все пропрієтарне програмне забезпечення, включаючи мікропрограму пристрою. Це може здатися благородним, але вкрай проблематично в контексті прошивки. Їжа для роздумів:

Окрім цього, FSDG здається нормальним. Будь-яка вільна операційна система має в ідеалі не містити пропрієтарних драйверів або застосунків.

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

Найбільш поширений приклад пропрієтарної прошивки в Linux для пристроїв wifi. Це цікавий сценарій використання, з джерельним кодом, тому що його може бути використано для контрольованого власником software defined radio.

Шлях Debian є ідеальним. Дистрибутив Debian GNU+Linux повністю вільний за замовчуванням, і вони включають додаткову прошивку за необхідності, яку вони мають в окремому репозиторії, що містить її. Якщо ви хочете тільки прошивку, тривіально взяти образи встановлювача з нею доданою, або додати її до вашої встановленої системи. Вони розповідають вам, як зробити це, що означає, що вони допомогають людям отримати деяку свободу, замість ніякої. Це невід’ємно прагматичний спосіб робити справи, і це те, як це робить Libreboot.

Більше контексту, стосовно Debian, доступно в публікації цього блога: https://blog.einval.com/2022/04/19#firmware-what-do-we-do - в ньому, автор, відомий розробник Debian, робить чудовий акцент про прошивку пристроїв, подібну до статті (Libreboot), яку ви зараз читаєте. Її варто прочитати! Станом на жовтень 2022 року, Debian проголосував за включення прошивки пристроїв за замовчуванням, в наступних випусках Debian. Раніше Debian виключав таке мікропрограмне забезпечення, але дозволяв вам його додавати.

OpenBSD майже така сама, але вони розумні в цьому: під час початкового завантаження, після інсталяції, він повідомляє вам, яке мікропрограмне забезпечення потрібно, і оновляє його для вас. Це дуже прозоро обробляється їхньою програмою fw_update, про яку ви можете прочитати тут:

https://man.openbsd.org/fw_update

Заборона прошивки linux конкретно є загрозою свободі в довгостроковій перспективі, тому що нові користувачі GNU+Linux можуть бути відбиті від використання ОС, якщо їх апаратне забезпечення не працює. Ви можете сказати: просто купіть нове обладнання! Це часто неможливо для користувачів, і користувач також може не мати навичок для зворотного проектування.

Більш детальна інформація про мікрокод

Releases after 20230423 will provide separate ROM images with microcode excluded, alongside the default ones that include microcode.

Щоб було зрозуміло: бажано, щоб мікрокод був вільним. Мікрокод систем Intel та AMD є пропрієтарним. Факти і почуття рідко збігаються; метою цього розділу є поширення фактів.

Система збірки libreboot тепер дозволяє оновлення мікрокоду за замовчуванням.

Відсутність оновлень мікрокоду ЦП є абсолютною катастрофою для стабільності та безпеки системи.

Що ще гірше, той самий текст, цитований із критеріїв FSF RYF, насправді конкретно згадує мікрокод. Знову процитую для нащадків:

“Однак є один виняток для вторинних вбудованих процесорів. Виняток стосується програмного забезпечення, що постачається всередині допоміжних і низкорівневих процесорів та FPGA, у яких інсталяція програмного забезпечення не передбачається після того, як користувач отримає продукт. Це може включати, наприклад, мікрокод всередині процесора, мікропрограму, вбудовану в пристрій вводу-виводу, або структуру вентилів FPGA. Програмне забезпечення в таких вторинних процесорах не вважається програмним забезпеченням продукту.”

Тут обговорюється мікрокод, який записується в mask ROM на самому ЦП. Одночасно він не дає ОК для оновлень мікрокоду, які надаються coreboot або ядром Linux; згідно з FSF, це напад на вашу свободу, але старіший мікрокод із більшими помилками, записаний на ROM, є нормальним.

ЦП вже має мікрокод, записаний в mask ROM. Мікрокод налаштовує логічні вентилі в ЦП, для реалізації набору інструкцій через спеціальні декодери, які мають фіксовану функцію; неможливо, наприклад, реалізувати набір інструкцій RISCV на процесорі x86. Для мікрокода можливо тільки реалізувати x86, або зламаний x86, і мікрокод за замовчуваням майже завжди є зламаним x86 на ЦП Intel/AMD; це неминуче через складність цих процесорів.

FSF вважає, що ці оновлення мікрокоду x86 (для Intel/AMD) дозволяють повністю створити новий ЦП, який принципово відрізняється від x86. Це не правда. Також неправда, що всі інструкції в наборі інструкцій x86 реалізовано за допомогою мікрокоду. У деяких випадках використовується жорстко закодована схема! Оновлення мікрокоду більше нагадують крихітні одиничні патчі тут і там у сховищі git, за аналогією. Щоб знову потрапити у головний простір FSF: ці оновлення не можуть зробити ЦП еквівалентом рефакторингу всієї кодової бази. Це гарячі виправлення, нічого більше!

Невиключення цих оновлень призведе до нестабільного/невизначеного стану. Intel сама визначає, які помилки впливають на які ЦП, і вони визначають обхідні шляхи або надають виправлення в мікрокоді. Виходячи з цього, таке програмне забезпечення, як ядро Linux може обійти ці помилки/примхи. Крім того, апстрім версії ядра Linux можуть оновити мікрокод під час завантаження (однак все одно рекомендується робити це з coreboot для більш стабільної ініціалізації контролера пам’яті або “raminit”). Подібне можна сказати і про ЦП AMD.

Ось кілька прикладів того, як відсутність оновлень мікрокоду вплинула на Libreboot, змусивши Libreboot обійти зміни, внесені в апстрім coreboot, зміни, які були хорошими і зробили coreboot більш сумісним зі стандартами відповідно до специфікацій Intel. Libreboot довелося поламати coreboot, щоб зберегти деякі інші функції на деяких Thinkpad GM45/ICH9M:

https://browse.libreboot.org/lbmk.git/plain/resources/coreboot/default/patches/0012-fix-speedstep-on-x200-t400-Revert-cpu-intel-model_10.patch?id=9938fa14b1bf54db37c0c18bdfec051cae41448e

https://browse.libreboot.org/lbmk.git/plain/resources/coreboot/default/patches/0018-Revert-cpu-intel-Configure-IA32_FEATURE_CONTROL-for-.patch?id=4b7be665968b67463ec36b9afc7e8736be0c9b51

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

Виберіть свою отруту. Недодавання оновлень є безвідповідальним і, зрештою, марним, оскільки ви все одно отримуєте пропрієтарний мікрокод, ви просто отримуєте старішу, з більшими помилками, версію натомість!

Ця зміна в політиці проекту зовсім не впливає на вашу свободу, тому що в іншому випадку ви все одно маєте старіший мікрокод із більшими помилками. Однак він покращує надійність системи, включаючи оновлення!

Така прагматична політика перевершує догму, яку колись доводилося терпіти користувачам Libreboot. Простіше кажучи, проект Libreboot має на меті надати користувачам якомога більше свободи для їх апаратного забезпечення; так було завжди, але цей менталітет тепер застосовується до [набагато] більшої кількості обладнання.

Інші міркування

Також Libreboot не покриває суворо: OSHW і Право на ремонт (Right To Repair). Однак свобода на рівні кремнію була б дивовижною, і зусилля вже є; наприклад, подивіться на RISCV ISA (на практиці фактичне виготовлення все ще є пропрієтарним і не під вашим контролем, але RISCV є повністю вільним дизайном ЦП, який компанії можуть використовувати замість того, щоб використовувати пропрієтарний ARM/x86 і так далі). Подібним чином, Право на ремонт (можливість відремонтувати свій власний пристрій, що передбачає вільний доступ до схем і діаграм) є критично важливим з тієї ж причини, що критично важливо вільне програмне забезпечення (Право на хакерство)!

OSHW і Право на ремонт взагалі не охоплюються RYF (критерії FSF Поважає Вашу Свободу), критеріями, яких Libreboot дотримувався раніше.. RYF також робить кілька поступок, які зрештою завдають шкоди, наприклад, політика програмне забезпечення як схема, яка, чесно кажучи, є безглуздою. ROM все ще програмне забезпечення. Був час, коли FSF не вважав програмне забезпечення BIOS проблемою свободи, лише тому, що воно записане на mask ROM, а не прошито; ця політика FSF ігнорує той факт, що, маючи відповідні навички паяння, легко замінити автономні мікросхеми mask ROM на сумісну флеш-пам’ять.

Висновки

RYF сам по собі не є неправильним, просто має недоліки. Певним чином це правильно, і якщо його дотримуватися, результат надає багато свобод користувачеві, але RYF повністю ігнорує багато речей, які зараз можливі, включаючи свободи на апаратному рівні (критерії RYF охоплюють лише програмне забезпечення). Ці вказівки написані з припущеннями, які все ще були вірними в 1990-х роках, але відтоді світ змінився. Проект libreboot повністю відкидає цю політику та натомість використовує прагматичний підхід.

Висновок, який слід зробити з усього цього, такий:

Дотримання критеріїв FSF нічого не шкодить, але ці критерії є дуже консервативними. Його винятки слід ігнорувати та повністю ігнорувати. RYF більше не відповідає меті, і його слід переписати, щоб створити більш суворий набір інструкцій без усіх лазівок чи винятків. Як завжди було, Libreboot намагається завжди виходити за межі, але проект Libreboot не розглядає RYF як золотий стандарт. Зараз є можливі рівні свободи, які вказівки RYF взагалі не охоплюють, а в деяких випадках навіть активно не заохочують/перешкоджають, оскільки це робить компроміси на основі припущень, які більше не відповідають дійсності.

Сумна правда: RYF активно заохочує менше свободи, не будучи достатньо сміливим. Він встановлює прапор перемоги та говорить місію виконано, незважаючи на те, що робота далека від завершення!

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

Я пропоную написати нові рекомендації, щоб замінити RYF. Ці нові правила ліквідують усі винятки/лазівки та вимагають, щоб все програмне забезпечення було вільним на машині або якомога більше. Замість того, щоб лише рекламувати продукти, які відповідають певним стандартам, просто каталогізуйте всі системи у великій базі даних свого роду (наприклад, h-node.org, але краще), яка точно визначатиме, які апаратні і програмні проблеми існують на кожному пристрої. Включіть Право на ремонт і OSHW (включно з такими речами, як RISCV) до найбільш “ідеальної” стандартної машини; золотим стандартом є вільний кремній, як те, над чим Сем Зелоф та інші працюють зараз.

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

Не називайте це “Поважає вашу свободу” чи щось подібне. Натомість назвіть це приблизно так: каталог свободи. І насправді зосередьтеся на апаратному забезпеченні, а не лише на програмному забезпеченні!

Інші ресурси

Повідомлення в блозі RYF Аріадни Конілл

Аріадна Конілл, голова групи безпеки Alpine Linux, опублікувала дуже серйозну статтю про RYF, у якій висловлено схожі моменти в порівнянні з цією статтею. Однак Аріадна докладно розглядає кілька інших прикладів проблем із критеріями FSF RYF; наприклад, йдеться про продукт Novena від Bunnie.

Варто прочитати! Посилання:

https://ariadne.space/2022/01/22/the-fsfs-relationship-with-firmware-is-harmful-to-free-software-users/

Markdown: https://libreboot.org/news/policy.uk.md

Підписатися на RSS

Індекс сайта

Ця сторінка була створена з Untitled Static Site Generator.