stringtranslate.com

Двоичный объект

В контексте бесплатного программного обеспечения с открытым исходным кодом проприетарное программное обеспечение , доступное только в виде двоичного исполняемого файла, называется большим двоичным объектом или двоичным двоичным объектом . Этот термин обычно относится к модулю драйвера устройства , загружаемому в ядро ​​операционной системы с открытым исходным кодом , а иногда также применяется к коду, работающему вне ядра, например, к образам встроенного ПО системы, обновлениям микрокода или пользовательским программам. [1] [2] [3] [4] [5] [6] Термин «блоб» впервые использовался в системах управления базами данных для описания набора двоичных данных, хранящихся как единый объект.

Когда поставщики компьютерного оборудования предоставляют полную техническую документацию для своих продуктов, разработчики операционных систем могут писать драйверы аппаратных устройств для включения в ядра операционной системы. Однако некоторые поставщики, такие как Nvidia , не предоставляют полную документацию для некоторых своих продуктов и вместо этого предоставляют только двоичные драйверы. Такая практика наиболее распространена для драйверов ускоренной графики , беспроводных сетевых устройств и аппаратных RAID-контроллеров . [7] В частности, двоичные объекты очень редко встречаются для контроллеров беспроводных сетевых интерфейсов , которые почти всегда можно настроить с помощью стандартных утилит (например, ifconfig ) прямо из коробки; Тео де Раадт из OpenBSD объясняет это работой, проделанной одним разработчиком FreeBSD . [8] [9]

Политика по проектам

Некоторые одобренные FSF проекты стремятся предоставить бесплатную операционную систему и удаляют все двоичные объекты, когда отсутствует документация по оборудованию или исходный код драйверов устройств и все применимые встроенные программы; К таким проектам относятся пакеты ядра Linux-libre от FSFLA , Parabola , Devuan , Trisquel и LibreCMC . [10] Однако в подавляющем большинстве проектов с открытым исходным кодом проводится различие между драйверами устройств, содержащими только двоичные данные (BLOB-объекты), и прошивками, работающими только в двоичном формате (не считающимися двоичными объектами [11] :  ... ), что позволяет использовать определенные проприетарные прошивки. свободно распространяются как часть их ядер и, к несогласию некоторых основных участников, также поддерживают использование проприетарных драйверов устройств, которые распространяются извне, обеспечивая внутренние интерфейсы совместимости для таких проприетарных драйверов и компонентов пользовательского пространства для работы с их системой. [12] [13] Проекты, следующие этой политике, включают само ядро ​​Linux , NetBSD , FreeBSD , DragonFly BSD и большинство дистрибутивов Linux . [14] Некоторые из этих проектов предоставляют возможности для построения системы без проприетарной прошивки, что исключает микрокод без исходного кода по требованию. [15]

Проект OpenBSD имеет примечательную политику не только не принятия каких-либо двоичных драйверов устройств в свое дерево исходного кода, но также официально не поддерживает какие-либо сторонние проприетарные компоненты драйверов устройств на своей платформе; [16] :  38... ссылаясь не только на возможность возникновения необнаружимых или неисправимых недостатков безопасности, но и на посягательство на открытость и свободу программного обеспечения. [17] Фонд свободного программного обеспечения (FSF) активно выступает против двоичных объектов. [18] FSF также считает, что политика OpenBSD сформулирована запутанно, поскольку «капли» в сообществе BSD относятся только к тому, что они считают несвободными драйверами, и не применяются к проприетарным прошивкам и микрокоду без исходного кода. [19] : BSD  Проект Debian включал как бесплатные, так и несвободные бинарные прошивки из ядра Linux , чётко обозначая и разделяя несвободные пакеты [20] в соответствии с Общественным договором Debian . Начиная с Debian 6.0 эти капли были удалены. [19] : Дебиан 

Руководитель проекта OpenBSD Тео де Раадт защищает политику запроса прав на распространение только микропрограммного обеспечения. «Как только они будут распространены… по крайней мере, устройство заработает». Подразумевая, что альтернативой участникам его небольшого проекта было бы самостоятельно написать бесплатную прошивку на языке ассемблера многих чипсетов, он умоляет «не нагружать нас дополнительными задачами». Несмотря на это, он отдает предпочтение чипсетам, работающим без прошивки, и тепло отзывается об азиатских разработках, которые, по его словам, медленнее выходят на рынок, но более зрелы. [17]

Собственный графический драйвер Linux, libGL-fglrx-glx , будет использовать ту же инфраструктуру DRM, что и Mesa 3D . Поскольку стабильного встроенного ABI в ядре нет , AMD приходилось постоянно адаптировать прежний двоичный объект, используемый Catalyst.

В сообществе разработчиков ядра Linux Линус Торвальдс сделал резкие заявления по вопросу о двоичных модулях, заявив: «Я отказываюсь даже думать о том, чтобы связать себе руки из-за какого-то двоичного модуля», и продолжив: «Я хочу, чтобы люди знали что когда они используют только двоичные модули, это ИХ проблема». [21] В 2008 году 176 разработчиков ядра Linux подписали Заявление о позиции по модулям ядра Linux , в котором говорилось: «Мы, нижеподписавшиеся разработчики ядра Linux, считаем любой модуль ядра Linux или драйвер с закрытым исходным кодом вредным и нежелательным... Мы неоднократно заявляли обнаружили, что они наносят ущерб пользователям Linux, предприятиям и всей экосистеме Linux». [22] Сопровождающий ядро ​​Linux Грег Кроа-Хартман заявил, что повторное распространение модулей с закрытым исходным кодом для ядра Linux под лицензией GNU General Public License является незаконным . [23]

Однако ядро ​​Linux содержит прошивку с закрытым исходным кодом, необходимую для различных драйверов устройств. [24] [19] Александр Олива , создатель Linux-libre , версии ядра Linux, которая пытается удалить все двоичные объекты, включая микрокод без исходного кода, написал в 2011 году: «Linux не является свободным программным обеспечением с 1996 года, когда Г-н Торвальдс принял первые части несвободного программного обеспечения в дистрибутивах Linux, которые он опубликовал с 1991 года. За эти годы, в то время как это ядро ​​выросло в 14 раз, количество несвободных прошивок, необходимых для драйверов Linux, выросло еще в четыре раза. тревожный коэффициент 83». [25]

Большинство драйверов для мобильных устройств под управлением операционной системы Android поставляются в двоичном виде и привязаны к определенной версии ядра Linux. Это очень затрудняет обновление версии ядра, поскольку может потребоваться обратное проектирование , переопределение проприетарных драйверов устройств в качестве бесплатного программного обеспечения, создание и отладка оболочек, бинарное исправление или комбинация этих шагов, и все это означает, что устаревшие устройства никогда не будут обновлены. получите последнюю версию Android. [ нужна цитата ]

Проблемы

Существует ряд причин, по которым двоичные объекты могут быть проблематичными. [11]

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

Во-вторых, поскольку исходный код недоступен, драйвер не может быть легко улучшен пользователями, не может быть портирован на архитектуры, которые изначально не поддерживались, не может быть адаптирован для работы с небольшими вариантами оборудования или обновлен для работы в новых ядрах, имеющих изменен API и архитектура.

В-третьих, использование этого программного обеспечения заставит пользователей доверять поставщикам или третьим лицам, которые не будут размещать в blob бэкдоры, шпионское ПО или вредоносный код. Кроме того, поставщик оборудования может в любой момент принять решение не поддерживать данную операционную систему, прекратить обслуживание драйверов или, в случае прекращения деятельности компании, оставить драйвер полностью без поддержки.

Наконец, бинарные объекты можно рассматривать как проведение границы между частью сообщества, которая верит в идеалы свободного программного обеспечения и отвергает несвободное программное обеспечение, и частью, которая считает открытый исходный код желательным по чисто техническим причинам, часто не имея сильной оппозиции к двоичным объектам. «пока они работают». Эта фрагментация и принятие растущего числа проприетарных компонентов в Linux рассматривается как ослабление способности сообщества противостоять тенденции производителей все чаще отказываться предоставлять документацию для своих двоичных файлов.

Использовать через обертки

Оболочка — это программное обеспечение, которое позволяет одной операционной системе использовать собственный двоичный драйвер устройства, написанный для другой операционной системы . Примерами оболочек являются NDISwrapper для Linux и Project Evil для FreeBSD и NetBSD . Эти оболочки позволяют этим операционным системам использовать сетевые драйверы, написанные для Microsoft Windows, путем реализации Microsoft NDIS API .

Другой пример — обеспечение уровней совместимости, чтобы можно было использовать сторонние утилиты для обслуживания оборудования. Примеры включают некоторые драйверы RAID-контроллера во FreeBSD , где системному администратору придется включить уровень совместимости с Linux во FreeBSD и самостоятельно приобретать двоичные объекты, специфичные для Linux, непосредственно у производителя оборудования для мониторинга и обслуживания оборудования. [12] [13] [26] Примерно в 2005 году такое положение дел побудило OpenBSD создать и популяризировать концепции bio(4) , bioctl и сенсорного привода в качестве альтернативного решения для мониторинга RAID , [27] [16] оба из которых впоследствии эти концепции нашли свое применение и в NetBSD .

Прошивка устройства

Прошивка — это программное обеспечение, необходимое для встроенных микроконтроллеров , которое сопровождает некоторое оборудование, и обычно не считается двоичным объектом. [28] [19] : BSD  [11] :  ... Во многих устройствах прошивка хранится в энергонезависимой встроенной флэш-памяти , но для снижения затрат и упрощения обновления некоторые устройства содержат только статическую оперативную память и требуют наличия операционной системы хоста. загружать прошивку при каждом подключении (особенно USB- устройств). Хотя прошивка, таким образом, присутствует в драйвере операционной системы, она просто копируется на устройство, а не выполняется ЦП, что устраняет опасения по поводу дополнительных недостатков безопасности по сравнению с тем, что уже возможно при атаке DMA, даже если прошивка уже хранилась в устройство всегда. Проект OpenBSD принимает двоичные образы встроенного ПО/ микрокода и будет распространять эти образы, если это разрешено лицензией; [28] [29] Если бесплатное и безусловное распространение не разрешено поставщиком, машинные инструкции по выборке этих образов могут быть предоставлены в дереве портов (что исключает доступность некоторых обремененных беспроводных устройств (например, Intel Wireless) во время первоначальная установка). [30] В реализациях Microsoft Windows двоичный файл микрокода может быть встроен непосредственно в драйвер устройства SYS/DLL/VXD, а не в отдельный файл микрокода.

БИОС и UEFI

SeaBIOS , реализация BIOS с открытым исходным кодом, работающая в качестве полезной нагрузки основной загрузки на Lenovo ThinkPad X60.

BIOS , который функционирует как загрузчик и поддерживает устаревшие приложения реального режима , является важнейшим компонентом многих IBM-совместимых компьютеров. В конце 1990-х началась работа над EFI (расширяемым интерфейсом прошивки) с целью перевести устаревший BIOS на современный интерфейс с модульной моделью драйверов. EFI имеет закрытый исходный код и в конечном итоге был принят многими ведущими производителями оборудования как UEFI (унифицированный расширяемый интерфейс прошивки). EDK (EFI Development Kit) был разработан для помощи в проектах разработки встроенного ПО EFI. [31]

Также в конце 1990-х годов был начат проект coreboot с целью создания с нуля альтернативы устаревшему BIOS с открытым исходным кодом. [31] Сообщество разработчиков coreboot организовано вокруг Стефана Рейнауэра и возглавляется разработчиками прошивок с правами на коммит. [32] Несмотря на то, что двоичная прошивка с закрытым исходным кодом лежит в основе архитектуры x86 , coreboot включает в себя только несколько проприетарных двоичных файлов, которые необходимы для предоставления пользователям аппаратной поддержки базового уровня. [33] Полностью открытой альтернативой BIOS и UEFI является libreboot , продвигаемая Фондом свободного программного обеспечения (FSF). [34]

Смотрите также

Рекомендации

  1. ^ Майкл Ларабель (6 августа 2012 г.). «Coreboot: замена двоичного видео-блока BIOS от Intel». Фороникс . Проверено 23 июня 2015 г.
  2. ^ Крис Хоффманн (13 февраля 2015 г.). «Как Intel и производители ПК не позволяют вам модифицировать прошивку вашего ноутбука». pcworld.com . Проверено 23 июня 2015 г.
  3. ^ «Статус свободы BIOS» . puri.sm . 12.11.2014 . Проверено 23 июня 2015 г.
  4. ^ Майкл Ларабель (24 октября 2012 г.). «Драйвер графического процессора Raspberry Pi оказался чушью» . Фороникс . Проверено 23 июня 2015 г.
  5. ^ Джейк Эдж (17 июня 2015 г.). «Chromium внезапно начинает загружать двоичный объект». LWN.net . Проверено 23 июня 2015 г.
  6. ^ «3.9: «Капля!»» Песни релиза OpenBSD . OpenBSD . 01 мая 2006 г. Большие двоичные объекты — это бинарные драйверы, скомпилированные поставщиком, без исходного кода.
  7. ^ «Пакеты Debian, созданные на основе исходного пакета «firmware-nonfree» — двоичная прошивка для различных драйверов в ядре Linux» . 2010 . Проверено 25 марта 2010 г.
  8. ^ Константин А. Муренин (10 декабря 2006 г.). «Почему так важно иметь документацию по программированию железа». Linux.org.ru (на русском языке).
  9. ^ Тео де Раадт (03 декабря 2016 г.). «Страница 11: Аппаратное обеспечение: Ethernet». Откройте документацию по оборудованию. OpenCON 2006, 2–3 декабря 2006 г. Courtyard Venice Airport, Венеция/Тессера, Италия. Лишь несколько непокорных продавцов остаются закрытыми. / Ethernet 95% задокументирован, 99% работает / Открытая документация во многом благодаря усилиям одного человека: Билла Пола
  10. ^ «Список бесплатных дистрибутивов GNU/Linux». Проект ГНУ . Фонд свободного программного обеспечения .
  11. ^ abc Эндрюс, Джереми (19 апреля 2006 г.). «Интервью с Джонатаном Греем и Дэмиеном Бергамини». kerneltrap.org. Архивировано из оригинала 11 декабря 2007 г. Проверено 6 января 2008 г.
  12. ^ аб Скотт Лонг; Адаптек, Инк (2000). «aac(4) — драйвер контроллера Adaptec AdvancedRAID». Перекрестная ссылка BSD . FreeBSD . Если ядро ​​скомпилировано с опцией COMPAT_LINUX или загружены модули aac_linux.ko и linux.ko...
    • «aac — драйвер контроллера Adaptec AdvancedRAID». Страницы руководства FreeBSD.
  13. ^ аб Ахим Лойбнер (2013). «aacraid(4) — драйвер контроллера Adaptec AACRAID». Перекрестная ссылка BSD . FreeBSD . Если ядро ​​скомпилировано с опцией COMPAT_LINUX или загружены модули aacraid_linux.ko и linux.ko...
    • «aacraid — драйвер контроллера Adaptec AACRAID». Страницы руководства FreeBSD.
  14. Мацан, Джем (15 июня 2005 г.). «Знатоки BSD в Linux». НовостиФордж. Архивировано из оригинала 23 марта 2006 года . Проверено 7 июля 2006 г.См. ответ Кристоса Зуласа на вопрос: «Является ли совместное использование Free/Open/NetBSD и ядром Linux обычным явлением? И если да, то происходит ли это в обе стороны?»
  15. ^ "сборка/опции/WITHOUT_SOURCELESS_UCODE". Перекрестная ссылка BSD . FreeBSD . 04.02.2012.
  16. ^ ab «3.8: «Хакеры утраченного рейда»» . Песни релиза OpenBSD . OpenBSD . 01.11.2005.
  17. ^ Аб Эндрюс, Джереми (2 мая 2006 г.), «Интервью: Тео де Раадт», KernelTrap , Джереми Эндрюс, заархивировано из оригинала 3 июня 2006 г.
  18. ^ «Протест против ATI чуть не привел к аресту RMS». Фонд свободного программного обеспечения. 27 апреля 2006 года . Проверено 10 октября 2006 г.
  19. ^ abcd «Объясняем, почему мы не поддерживаем другие системы». Проект ГНУ . Фонд свободного программного обеспечения .
  20. ^ «Пакеты прошивки Debian-Linux» . 2010 . Проверено 25 марта 2010 г.
  21. ^ "a/lt-двоичный". lwn.net .
  22. ^ Грег Кроа-Хартман (июнь 2008 г.). «Заявление о позиции по модулям ядра Linux». Фонд Linux .
  23. ^ Грег Кроа-Хартман (2006). «Мифы, ложь и правда о ядре Linux». Симпозиум по Linux .
  24. ^ «Несвободная прошивка». Проект GNU § Рекомендации по распространению свободных систем (GNU FSDG) . Фонд свободного программного обеспечения .
  25. ^ "::[FSFLA]:: Верните себе свободу с Linux-2.6.33-libre". fsfla.org .
  26. ^ Джонатан Грей (2 декабря 2006 г.). «Страница 26: Открыта только для бизнеса: FreeBSD». Архитектура и реализация драйверов в OpenBSD. OpenCON 2006, 2–3 декабря 2006 г. Courtyard Venice Airport, Венеция/Тессера, Италия . Проверено 27 марта 2019 г. драйверы, предназначенные только для двоичных инструментов управления RAID Linux
  27. ^ Тео де Раадт (9 сентября 2005 г.). «Поддержка управления RAID появится в OpenBSD 3.8». misc@ (список рассылки). OpenBSD .
  28. ^ ab «OpenBSD работает над открытием беспроводных наборов микросхем». Ядерная ловушка. 2 ноября 2004 г. Архивировано из оригинала 20 июня 2006 г. Проверено 23 июня 2006 г.
  29. ^ "/sys/dev/microcode/". OpenBSD .
  30. ^ "sysutils/прошивка". Порты OpenBSD .
  31. ^ AB Винсент Циммер; Цзиминь Сунь; Марк Джонс; Стефан Рейнауэр (2015). Решения для встроенного ПО: лучшие практики разработки для Интернета вещей . Апресс. п. 121. ИСБН 9781484200704.
  32. ^ Винсент Циммер; Цзиминь Сунь; Марк Джонс; Стефан Рейнауэр (2015). Решения для встроенного ПО: лучшие практики разработки для Интернета вещей . Апресс. п. 61. ИСБН 9781484200704.
  33. ^ Винсент Циммер; Цзиминь Сунь; Марк Джонс; Стефан Рейнауэр (2015). Решения для встроенного ПО: лучшие практики разработки для Интернета вещей . Апресс. п. 65. ИСБН 9781484200704.
  34. ^ «Кампания за бесплатный BIOS». Фонд свободного программного обеспечения. 29 ноября 2006 г. Проверено 2 января 2007 г.

Внешние ссылки