Кіріспе
Тек екілік кодпен жарияланған бағдарламалық қамтамасыз ету еркін және ашық бастапқы кодты бағдарламалық қамтамасыз ету аясында тек екілік орындалатын файл ретінде қол жетімді меншік бағдарламалық қамтамасыз етуді блоб немесе екілік блоб деп атайды. Термин әдетте ашық бастапқы кодты операциялық жүйенің ядросына жүктелетін құрылғы драйвер модуліне қатысты, кейде ядродан тыс орындалатын кодқа, мысалы жүйелік тұрақтандыру бейнелеріне, микрокод жаңартуларына немесе пайдаланушы бағдарламаларына қолданылады. Блоб термині алғаш рет деректер базасын басқару жүйелерінде біртұтас нысан ретінде сақталған бинарлық деректер жиынтығын сипаттау үшін қолданылған. Компьютерлік жабдықтар өндірушілері өз өнімдеріне толық техникалық құжаттама ұсынған кезде, операциялық жүйелерді жасаушылар операциялық жүйе ядроларына енгізілетін аппараттық құрылғы драйверлерін жаза алады. Алайда, кейбір сатушылар, мысалы Nvidia, кейбір өнімдері үшін толық құжаттама бермейді және тек бинарлық драйверлерді ұсынады. Бұл практика жеделдетілген графикалық драйверлер, сымсыз желі құрылғылары және RAID аппараттық контроллерлері үшін ең көп таралған. Ең бастысы, бинарлық блоктар сымсыз желі интерфейсі емес контроллерлер үшін өте сирек кездеседі, оларды әрқашан стандартты утилиталар арқылы (ifconfig сияқты) әрқашан конфигурациялауға болады; OpenBSD-дің Тео де Раадт мұны жалғыз FreeBSD әзірлеушісінің жұмысына жатқызады.
In the context of free and open source software, proprietary software only available as a binary executable is referred to as a blob or binary blob. The term usually refers to a device driver module loaded into the kernel of an open source operating system, and is sometimes also applied to code running outside the kernel, such as system firmware images, microcode updates, or userland programs. The term blob was first used in database management systems to describe a collection of binary data stored as a single entity. When computer hardware vendors provide complete technical documentation for their products, operating system developers are able to write hardware device drivers to be included in the operating system kernels. However, some vendors, such as Nvidia, do not provide complete documentation for some of their products and instead provide binary only drivers. This practice is most common for accelerated graphics drivers, wireless networking devices, and hardware RAID controllers. Most notably, binary blobs are very uncommon for non wireless network interface controllers, which can almost always be configured via standard utilities (like ifconfig) out of the box; Theo de Raadt of OpenBSD attributes this to the work done by a single FreeBSD developer.
Жоба бойынша саясат
FSF мақұлдаған кейбір жобалар еркін операциялық жүйе беруге тырысады және құрылғы драйверлері мен барлық қолданылатын тұрақтандыру үшін аппараттық немесе бастапқы код туралы құжаттама болмаған кезде барлық екілік бөліктерді алып тастайды; мұндай жобаларға FSFLA, Parabola, Devuan, Trisquel және LibreCMC-тен Linux libre ядросының пакеттері кіреді. Алайда, ашық бастапқы коды бар жобалардың басым көпшілігі тек бинарлық құрылғы драйверлері (блобтар) мен тек бинарлық тұрақтандыру (блобтар деп саналмайды) арасында айырмашылық жасайды, бұл белгілі бір меншік фирмалық бағдарламалардың өз ядроларының бөлігі ретінде еркін таратылуына мүмкіндік береді және кейбір негізгі үлескерлердің келіспеушілігіне қарамастан, сыртқы түрде таратылған меншік құрылғы драйверлерін пайдалануды қолдайды, мұндай меншік драйверлері мен пайдаланушылар кеңістігі компоненттерінің өз жүйесімен жұмыс істеуіне ішкі үйлесімділік интерфейстерін қамтамасыз етеді. Бұл саясатты ұстанатын жобаларға Linux ядросының өзі, NetBSD, FreeBSD, DragonFly BSD және Linux дистрибутивтерінің көпшілігі кіреді. Бұл жобалардың кейбіреулері жүйелерді меншік фирмалық бағдарламалық жасақтамасыз құруға мүмкіндік береді, осылайша сұранысқа сай бастапқы кодсыз микрокодты алып тастайды. OpenBSD жобасының өзінің бастапқы ағашына ешқандай бинарлық құрылғы драйверлерін қабылдамау ғана емес, сонымен қатар платформасында үшінші тараптың меншік драйвер компоненттерін де ресми түрде қолдамайтын саясаты бар; ол тек анықталмайтын немесе қалпына келмейтін қауіпсіздік кемшіліктері үшін ғана емес, сонымен қатар оның бағдарламалық жасақтамасының ашықтығы мен бостандығына қол сұғушылықты да атайды. Free Software Foundation (FSF) бинарлық блоктарға қарсы белсенді түрде науқан жүргізеді. FSF сонымен қатар OpenBSD саясатын бүлдіршіндікпен жазылған деп санайды, өйткені BSD қауымдастығындағы "блобтар" тек еркін емес драйверлер деп саналатын нәрселерге ғана қатысты, ал меншік фирмалық бағдарламалық жасақтама мен бастапқы кодсыз микрокодқа қолданылмайды. Debian жобасы Linux ядросынан тегін және тегін емес екілік тұрақтандыруды қамтыды, Debian әлеуметтік келісімшартына сәйкес тегін емес пакеттерді анық белгілеп, бөліп тастады. Debian 6.0-дан бастап бұл бөліктер алынып тасталды. OpenBSD үшін жоба жетекшісі Тео де Раадт тек микрокодты бағдарламалық жасақтама үшін ғана тарату құқығын сұрату саясатын қорғайды. "Олар таратылғаннан кейін, кем дегенде құрылғы жұмыс істейді". Оның кішкентай жобасының мүшелері көптеген чипсеттердің құрастыру тілінде тегін бағдарламалық жасақтаманы кодтау үшін балама болатынын білдіріп, ол "бізді көбірек тапсырмалармен жүктемеңіз" деп өтінді. Осыған қарамастан ол фирмалық бағдарламасыз жұмыс істейтін чип-сеттерді қолдайды және нарыққа кіруі баяу, бірақ жетілген типті деп сипаттайтын азиялық дизайндар туралы жылы сөйлейді. 2008 жылы 176 Linux ядросының әзірлеушілері Linux ядросының модульдері туралы позиция мәлімдемесіне қол қойды, онда "Біз, төменде қол қойған Linux ядросының әзірлеушілері, кез келген жабық Linux ядросының модулін немесе драйверін зиянды және жағымсыз деп санаймыз. Біз оларды Linux пайдаланушылары, бизнесі және үлкен Linux экожүйесі үшін зиянды деп бірнеше рет анықтадық". Linux ядросының қызметшісі Грег Кроа Хартман GNU General Public License лицензиясы берілген Linux ядросы үшін жабық бастапқы кодты модульдерді қайта тарату заңсыз деп мәлімдеді. Алайда, Linux ядросында әртүрлі құрылғы драйверлері қажет ететін жабық бастапқы кодты тұрақтандыру бар. Линукс ядросының барлық бинарлық блоктарын, соның ішінде бастапқы кодсыз микрокодты алып тастауға тырысатын Линукс либре нұсқасының ұстаушысы Александр Олива 2011 жылы былай деп жазды: "Линукс 1996 жылдан бері еркін бағдарламалық жасақтама емес, ол 1991 жылдан бері жарияланған Линукс дистрибутивтерінде ерікті емес бағдарламалық жасақтаманың алғашқы бөліктерін қабылдағаннан кейін. Осы жылдар ішінде ядро 14 есе өскенде, Linux драйверлеріне қажет етілетін тегін емес бағдарламалық жасақтама саны 83 есеге өсті". Android операциялық жүйесін қолданатын ұялы құрылғылар үшін драйверлердің көпшілігі бинарлық түрде жеткізіледі және Linux ядросының белгілі бір нұсқасына байланыстырылады. Бұл ядролық нұсқаны жаңартуды өте қиын етеді, өйткені кері инженерияны, меншік иелік еткен құрылғы драйверлерін еркін бағдарламалық жасақтама ретінде қайта іске асыруды, орамаларды жасау мен жөндеуді, бинарлық жаңыртуды немесе осы қадамдардың үйлесімін талап етуі мүмкін, мұралық құрылғылар ешқаш�...
Қиындықтар
Бинарлық шағылыстардың проблемалық болуының бірнеше себебі бар. Біріншіден, олардың нақты жұмысын білуге болмайды және қателерді бастапқы кодты тексеру арқылы анықтауға болмайды; қателер жүйе күтпегендей әрекет ете бастағанда, мұқият тексеру арқылы диагностикаланады. Мұндай анықталмаған қателер пайдаланушылар мен жүйелерді қауіпсіздікке қауіп төндіріп, жасырын түрде қауіп төндіреді. Осылайша жүргізушінің мақсатқа сай келетіндігін тексеру мүмкін емес, ал егер қате табылса, оны түзетудің оңай жолы жоқ. Екіншіден, бастапқы кодтың болмауынан драйверді пайдаланушылар оңай жақсартуы, бастапқыда қолдау таппаған архитектураларға порттауы, аппараттық жабдықтың кішкене нұсқаларында жұмыс істеуге бейімделуі немесе өзгертілген API және архитектурасы бар жаңа ядроларда жұмыс істеуге жарамды болуы мүмкін емес. Үшіншіден, бұл бағдарламалық жасақтаманы қолдану пайдаланушыларды сатушыларға немесе үшінші тараптарға артқы есіктерді, шпиондық бағдарламаларды немесе зиянды кодты blob-қа енгізбеуге сенуге мәжбүрлейді. Сонымен қатар, аппараттық өнім беруші белгілі бір операциялық жүйені қолдамай, кез келген уақытта драйверді жөндеуден бас тарта алады немесе компания істен шыққан жағдайда драйверді мүлдем қолдамай қалдыра алады. Ақырында, бинарлық блоктар еркін бағдарламалық қамтамасыз ету идеалдарына сенетін, меншік бағдарламалық қамтамасыз етуді қабылдамайтын қауымдастықтың бөлігі мен ашық бастапқы кодты тек техникалық себептермен қажет деп санайтын, көбінесе "жұмыс істегенше" бинарлық блоктарға қарсылық білдірмейтін бөлігінің арасындағы шекараны салу ретінде қарастыруға болады. Бұл бөлшектеу және Linux-қа меншік компоненттерінің санының өсуі қауымдастықтың өндірушілердің бинарлық файлдар үшін құжаттама беруден бас тарту үрдісіне қарсы тұру қабілетін әлсірету ретінде қарастырылады.
Қаптама арқылы пайдалану
Wrapper - бір операциялық жүйенің басқа операциялық жүйе үшін жазылған бинарлық меншік құрылғы драйверін пайдалануға мүмкіндік беретін бағдарламалық жасақтама. Wrapper-ге мысал ретінде Linux үшін NDISwrapper және FreeBSD және NetBSD үшін Project Evil. Бұл орамалар осы операциялық жүйелерге Microsoft Windows үшін жазылған желілік драйверлерді Microsoft NDIS API-ді іске асыру арқылы пайдалануға мүмкіндік береді. Тағы бір мысал - жабдыққа қызмет көрсету үшін шетелдік коммуналдық қызметтерді пайдалану үшін үйлесімділік қабаттарын қамтамасыз ету. Мысал ретінде FreeBSD-дегі кейбір RAID контроллерлік драйверлерді келтіруге болады, онда жүйе әкімшісі FreeBSD-де Linux үйлесімділік қабатын қосуға және аппаратты бақылау және қызмет көрсету үшін Linux-қа арналған жеке бинарлық блоктарды тікелей аппарат жасаушыдан сатып алуға тиіс. 2005 жылы бұл жағдай OpenBSD-ді bio(4), bioctl және сенсорлық диск тұжырымдамаларын RAID мониторингі үшін баламалы шешім ретінде жасауға және танымал етуге итермеледі, бұл тұжырымдамалар кейіннен NetBSD-ге де жол тапты.
Құрылғының бағдарламалық жасақтамасы
Firmware - кейбір аппараттық жабдықпен бірге жүретін микробасқарушыларда қажет бағдарламалық қамтамасыз ету, әдетте, екілік бөлік деп саналмайды. Көптеген құрылғыларда, тұрақтандыру бағдарламалары ұшпалы емес жадқа сақталады, бірақ шығындарды азайту және жаңартуды жеңілдету үшін кейбір құрылғыларда тек статикалық операциялық жад бар және хост операциялық жүйеге қосылған сайын (әсіресе USB құрылғылары) тұрақтандыру бағдарламаларын жүктеуді қажет етеді. Осылайша, фирмалық бағдарлама операциялық жүйенің драйверінде болса да, ол құрылғыға көшіріледі және CPU орындамайды, бұл DMA шабуылмен салыстырғанда қосымша қауіпсіздік кемшіліктері туралы алаңдаушылықты жояды, тіпті егер фирмалық бағдарлама құрылғыда әрқашан сақталған болса да. OpenBSD жобасы бинарлық тұтас бағдарламалық жасақтама / микрокодты бейнелерді қабылдайды және егер лицензия рұқсат етсе, осы бейнелерді қайта таратады; егер сатушы тегін және шартты түрде қайта таратпаса, осы бейнелерді алу жөніндегі машина нұсқаулары порттар ағашында ұсынылуы мүмкін (бұл бастапқы орнату кезінде кейбір ауыр жүктелген сымсыз құрылғылардың (мысалы, Intel Wireless) қол жетімді болуына жол бермейді). Microsoft Windows-тың іске асырылуында микрокод бинарлық файл бөлек микрокод файлына қарағанда тікелей SYS / DLL / VXD құрылғы драйверіне енуі мүмкін.
BIOS және UEFI
BIOS, ол жүктеуші ретінде жұмыс істейді және мұралық нақты режимдегі қолданбаларды қолдайды, бұл көптеген IBM-ге үйлесімді компьютерлердің маңызды компоненті болып табылады. 1990 жылдардың соңында EFI (Extensible Firmware Interface) бойынша жұмыс басталды, мұра BIOS-ты модульді драйвер моделімен заманауи интерфейске көшіру мақсатымен. EFI жабық кодты болып табылады және оны көптеген жетекші аппараттық өндірушілер UEFI (Бірыңғай кеңейтілетін тұрақтандыру интерфейсі) ретінде қабылдады. EDK (EFI Development Kit) EFI фирмалық бағдарламалық жасақтаманы әзірлеу жобаларына көмек көрсету үшін әзірленді. Сондай-ақ 1990 жылдардың соңында, Coreboot жобасы бастапқыдан BIOS-қа ашық бастапқы кодты альтернатива жасау үшін басталды. Жабық кодты бинарлық тұрақтандыру x86 архитектурасының жүрегінде болғанына қарамастан, coreboot тек пайдаланушыларға базалық деңгейдегі аппараттық қолдау көрсету үшін қажетті бірнеше меншік бинарлық файлдарды қамтиды. BIOS және UEFI-ге толық ашық бастапқы кодты балама - Libreboot, оны Free Software Foundation (FSF) ұсынды.