Введение

Программное обеспечение, опубликованное только в двоичном коде В контексте свободного и открытого программного обеспечения, проприетарное программное обеспечение, доступное только в виде двоичного исполняемого файла, называется блобом или двоичным блобом. Термин обычно относится к модулю драйвера устройства, загруженному в ядро операционной системы с открытым исходным кодом, и иногда также применяется к коду, работающему вне ядра, например, изображения системного прошивки, обновления микрокода или программы пользовательского поля. Термин "блоб" впервые был использован в системах управления базами данных для описания коллекции бинарных данных, хранящихся как единое целое. Когда поставщики компьютерного оборудования предоставляют полную техническую документацию для своих продуктов, разработчики операционных систем могут писать драйверы аппаратных устройств, которые будут включены в ядра операционных систем. Однако некоторые поставщики, такие как Nvidia, не предоставляют полную документацию для некоторых своих продуктов и вместо этого предоставляют драйверы только для бинарных программ. Эта практика наиболее распространена для ускоренных графических драйверов, устройств беспроводной сети и аппаратных контроллеров RAID. Наиболее примечательно то, что бинарные blobs очень редки для контроллеров беспроводных сетевых интерфейсов, которые почти всегда могут быть настроены через стандартные утилиты (например, ifconfig) из коробки; Тео де Раадт из OpenBSD приписывает это работе, выполненной одним разработчиком FreeBSD.

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

Некоторые одобренные FSF проекты стремятся предоставить бесплатную операционную систему и удалят все бинарные блоки, когда отсутствует документация для аппаратного обеспечения или исходного кода драйверов устройств и всех применимых прошивок; такие проекты включают упаковку Linux libre kernel от FSFLA, Parabola, Devuan, Trisquel и LibreCMC. Однако подавляющее большинство проектов с открытым исходным кодом различают драйверы устройств только для бинарных файлов (blobs) и прошивку только для бинарных файлов (не считаются blobs), позволяя определенному фирменному фирменному программному обеспечению свободно распространяться как часть их ядра, и, к несогласию некоторых основных участников, также поддерживают использование фирменных драйверов устройств, которые распространяются внешне, обеспечивая внутренние интерфейсы совместимости для таких фирменных драйверов и компонентов пользовательского пространства для работы с их системой. Проекты, следующие этой политике, включают в себя ядро Linux, NetBSD, FreeBSD, DragonFly BSD и большинство дистрибутивов Linux. Некоторые из этих проектов предоставляют варианты построения системы без фирм-программ, исключая таким образом безисточник микрокода по запросу. Проект OpenBSD имеет заметную политику не только не принимать никаких драйверов двоичных устройств в своем дереве исходных данных, но и официально не поддерживать какие-либо сторонние компоненты драйверов устройств на своей платформе; ссылаясь не только на потенциал не обнаруживаемых или непоправимых недостатков безопасности, но и на посягательство на открытость и свободу его программного обеспечения. Фонд свободного программного обеспечения (FSF) активно ведет кампанию против бинарных блоков. FSF также считает, что политика OpenBSD сформулирована сбивающе, поскольку "блобы" в сообществе BSD относятся только к тем, что считается несвободными драйверами, и не применяются к проприетарной прошивке и микрокоду без исходного кода. Проект Debian включал как свободные, так и несвободные бинарные прошивки из ядра Linux, четко обозначая и разделяя несвободные пакеты в соответствии с Debian Social Contract. С Debian 6.0 эти пятна были удалены. В OpenBSD руководитель проекта Тео де Раадт защищает политику запроса прав на распространение только микрокодовой прошивки. "Когда они раздаются, по крайней мере, устройство работает". Подразумевая, что альтернативой будет для членов его небольшого проекта самостоятельно кодировать свободные прошивки на языке сборки многих чипсетов, он умоляет "не нагружать нас большей работой". Несмотря на это, он предпочитает чипсеты, работающие без прошивки, и тепло отзывается об азиатских моделях, которые, по его словам, медленнее выходят на рынок, но более зрелые. В 2008 году 176 разработчиков ядра Linux подписали Позиционное заявление о модулях ядра Linux, в котором говорилось: "Мы, нижеподписавшиеся разработчики ядра Linux, считаем любой модуль ядра Linux с закрытым исходным кодом или драйвер вредным и нежелательным. Мы неоднократно обнаруживали, что они наносят ущерб пользователям Linux, предприятиям и большей экосистеме Linux". Обеспечитель работы с ядром Linux Грег Кроа Хартман заявил, что перераспределение модулей с закрытым исходным кодом для ядра Linux, лицензированного по GNU General Public License, является незаконным. Однако ядро Linux содержит прошивку с закрытым исходным кодом, требуемую различными драйверами устройств. Александр Олива, разработчик Linux libre, версии ядра Linux, которая пытается удалить все бинарные блоки, включая микрокод без исходного кода, написал в 2011 году: "Linux не был свободным программным обеспечением с 1996 года, когда г-н Торвальдс принял первые части не свободного программного обеспечения в дистрибутивах Linux, которые он опубликовал с 1991 года. За эти годы, в то время как ядро выросло в 14 раз, количество не-свободных прошивок, требуемых драйверами Linux, выросло в тревожный 83 раз". Большинство драйверов для мобильных устройств с операционной системой Android поставляются в двоичном виде и связаны с определенной версией ядра Linux. Это делает очень трудным обновление версии ядра, потому что это может потребовать обратной инженерии, повторной реализации проприетарных драйверов устройств в качестве свободного программного обеспечения, создания и отладки оберток, бинарного патча или комбинации этих шагов, все из которых подразумевает, что устаревшие устройства никогда не получат последнюю версию Android.

Проблемы

Существует ряд причин, по которым бинарные блоки могут быть проблематичными. Во-первых, их точная работа не может быть известна, а ошибки не могут быть обнаружены путем проверки исходного кода; ошибки часто диагностируются только путем тщательного исследования, когда система начинает вести себя неожиданно. Такие незамеченные ошибки могут также безмолвно подвергать пользователей и системы риску для безопасности. Таким образом, пригодность водителя для этой цели не может быть проверена, и даже если ошибка найдена, ее не так легко исправить. Во-вторых, поскольку исходный код недоступен, драйвер не может быть легко улучшен его пользователями, не может быть портирован на архитектуры, которые изначально не поддерживаются, и не может быть адаптирован для работы с небольшими вариантами аппаратного обеспечения или обновлен, чтобы работать в новых ядрах с измененным API и архитектурой. В-третьих, использование этого программного обеспечения заставит пользователей доверять поставщикам или третьим лицам не вставлять бэкдоры, шпионское программное обеспечение или вредоносный код в блоб. Кроме того, поставщик аппаратного обеспечения может решить не поддерживать данную операционную систему, отказаться от обслуживания драйверов в любое время или, в случае закрытия компании, оставить драйвер полностью без поддержки. Наконец, бинарные блоки можно рассматривать как черту между частью сообщества, которая верит в идеалы свободного программного обеспечения, отвергая проприетарное программное обеспечение, и частью, которая считает открытый исходный код желательным по чисто техническим причинам, часто не имея сильной оппозиции к бинарным блокам "до тех пор, пока они работают". Эта фрагментация и принятие все большего числа проприетарных компонентов в Linux, как полагают, ослабляют способность сообщества противостоять тенденции производителей все чаще отказываться предоставлять документацию для своих двоичных файлов.

Использование через упаковку

Упакер - это программное обеспечение, которое позволяет одной операционной системе использовать драйвер двойного проприетарного устройства, написанный для другой операционной системы. Примерами оберток являются NDISwrapper для Linux и Project Evil для FreeBSD и NetBSD. Эти обертки позволяют этим операционным системам использовать сетевые драйверы, написанные для Microsoft Windows, путем реализации API NDIS от Microsoft. Другой пример - предоставление уровней совместимости, чтобы иностранные утилиты могли использоваться для обслуживания оборудования. Примеры включают некоторые драйверы контроллеров RAID в FreeBSD, где системный администратор должен был бы включить слой совместимости Linux в FreeBSD и самостоятельно приобретать бинарные блоки Linux непосредственно у производителя оборудования для мониторинга и обслуживания оборудования. Около 2005 года это обстоятельство побудило OpenBSD создать и популяризировать свои концепции bio(4), bioctl и сенсорных приводов в качестве альтернативного решения для мониторинга RAID, оба из которых впоследствии нашли свой путь в NetBSD.

Ферм-устройство устройства

Фермуар - это программное обеспечение, требуемое бортовыми микроконтроллерами, которые сопровождают некоторое оборудование, обычно не считается бинарным блоком. На многих устройствах прошивка хранится в нелетучей встроенной флэш-памяти, но для снижения затрат и облегчения обновлений некоторые устройства содержат только статическую оперативную память и требуют от операционной системы хоста загрузки прошивки каждый раз, когда они подключаются (особенно USB-устройства). Хотя прошивка присутствует в драйвере операционной системы, она просто копируется на устройство и не выполняется процессором, устраняя опасения по поводу дополнительных недостатков безопасности по сравнению с тем, что уже возможно при DMA-атаке, даже если прошивка уже хранилась в устройстве в любое время. Проект OpenBSD принимает бинарные изображения прошивки/микрокода и будет перераспределять эти изображения, если это разрешено лицензией; если свободное и безоговорочное перераспределение не разрешено поставщиком, инструкции машины по извлечению этих изображений могут быть предоставлены в дереве портов (что исключает доступность некоторых обремененных беспроводных устройств (например, Intel Wireless) во время первоначальной установки). В реализациях Microsoft Windows бинарный микрокод может быть встроен в драйвер устройства SYS / DLL / VXD непосредственно, в отличие от отдельного файла микрокода.

BIOS и UEFI

BIOS, который функционирует как загрузчик и поддерживает устаревшие приложения в реальном режиме, является важнейшим компонентом многих совместимых с IBM компьютеров. В конце 1990-х годов началась работа над EFI (Extensible Firmware Interface) с целью переноса устаревшего BIOS на современный интерфейс с модульной моделью драйверов. EFI является закрытым исходным кодом и в конечном итоге был принят многими ведущими производителями оборудования в отрасли как UEFI (Unified Extensible Firmware Interface). EDK (EFI Development Kit) был разработан для поддержки проектов по разработке прошивки EFI. Также в конце 1990-х годов был запущен проект coreboot для создания альтернативы с открытым исходным кодом для устаревшего BIOS с нуля. Несмотря на то, что закрытый исходный код бинарной прошивки был в основе архитектуры x86, coreboot включает в себя только несколько проприетарных бинарных файлов, которые необходимы для обеспечения пользователей базовой поддержкой аппаратного обеспечения. Полностью открытой альтернативой BIOS и UEFI является libreboot, который был продвинут Фондом свободного программного обеспечения (FSF).