България вече има закон за отворения код

Преди около десет дни бяха обнародвани измененията в Закона за електронното управление. Измежду тях е и изискването всяка система, която се разработва по задание от държавата, да бъде с отворен код и да се разработва в публично хранилище на Държавна агенция „Електронно управление“.

След като публикувах кратка новина по темата в Medium, тя бързо се разпространи през reddit, hacker news и slashdot и достигна до TechCrunch и TheNextWeb (както и няколко други).

Защо новината се оказа толкова голяма за технологичните медии? Защото макар много държави да имат политики и правила за използване на отворен код, и макар Европейският парламент да прави на няколко пъти препоръки за използването му, за първи път при нас това влиза в закон. Съответно ентусиазмът на технологичните общности е голям.

Обратно в реалността – какво на практика означава това. В детайли съм обяснил в лекцията си на OpenFest, но първото разяснение, което трябва да се направи е, че това не означава, че държавата няма да може да си купува повече софтуер със затворен код. Операционни системи, офис пакети, бази данни, счетоводни системи и всякакъв друг софтуер, за който се купуват лицензи, а не самия софтуер, ще продължи да действа по същия начин (макар че идеята за вбъдеще е да се поставят и системи с отворен код на масата, тъй като те са реална конкуренция в някои случаи, макар да нямат толкова силни отдели за продажби).

Софтуерът, който се разработва по специални изисквания на държавата, обаче, ще бъде публично достъпен. Той и в момента е собственост на държавата, която пък го е платила с данъците на гражданите си, съответно те имат пълното право да го използват както намерят за добре. Плюсовете от това са няколко – по-висока прозрачност за какво се харчат пари, повече възможности външни експерти да наблюдават процеса и да дават конструктивна критика, по-ясен механизъм за докладване на проблеми със сигурността, повече яснота за фирмите, които ще поддържат даден софтуер (до момента те може и да не знаят в „какво се забъркват“), презиползване на компоненти, които до момента всяка фирма разработва от нулата.

Въпросът за сигурността е първият, който бива задаван – така няма ли „лошите“ да видят как да атакуват системата. В информационната сигурност съществува понятието „security through obscurity“ (сигурност чрез неизвестност), и той не работи – ако нещо е сигурно, само защото „лошите“ не знаят как работи, то не е сигурно. Сигурността по дизайн изисква една система да бъде сигурна дори всичко за нея да е известно, с изключение на паролите и ключовете а достъп (те, разбира се, няма да са публични). Разбира се, че системите ще имат пропуски, но те няма да са достъпни само за злонамерените, а и за доброжелателните. Които всъщност са повече – през последната година съм получил много добронамерени описания на дупки в сигурността, без човекът да е злоупотребил с тях. Лошото е, че в момента ако не изискам лично кода и не го оправя „в ръчен режим“, а софтуерът е с изтекла поддръжка или фирмата е недобросъвестна, няма кой и как да оправи този проблем. Когато кодът е отворен, външни експерти ще могат да предлагат как да бъде поправен съответния проблем. И съм убеден, че ще го правят.

Но каква е по-голямата картинка – фирмите-изпълнители вече няма да си позволяват да неглижират качеството на кода, а оттам и качеството на системите. Държавата ще получава нещо по-добро дори само защото повече хора ще могат да го виждат и критикуват. Дали това ще реши проблемите на електронното управление – само по себе си, едва ли. Технологичните проблеми далеч не са всичко. Затова и в приетите изменения в Закона има и доста други изисквания (за интерфейси, за отворени данни, за архивиране), както и орган (държавна агенция), който да следи за спазването на тези правила.

Не бих казал, че стъпката е революционна, но определено България може да даде пример с нещо, което прави на държавно ниво. А дали реално ще го прави – зависи от всички.

Статията е публикувана в Терминал3

8 comments

  1. Всичко в тази статия е дървена философия.

  2. Предполагам това заключение ви освобождава от нуждата да се аргументирате?

  3. Не му обръщай внимание. За мен това стъпка в правилната посока.

  4. Критичното мислене е заместено от оптимизъм ;(

    Да разчитаме, че разни хора ще правят одит от добри намерения ден-за-ден на промените към N написани държавни системи е меко-казано наивно. При монолити – още повече.
    Всяка една промяна е потенциална грешка. И един опитен чукча, търсещ такава грешка в даден момент във времето в една единствена система, под лупа.. е почти гарантирано, че ще я намери.
    Да давам за пример всички дупки, които се намират в отворения гледан-под-лупа linux kernel-а всяка седмица и се patchват е окей, но ако това включваше лични данни на един народ, сервирани на тепсия, е, нещата изглеждат по друг начин.

    Решението е не-добре обмислено. И докато не бих казал, че е лошо, има нужда от леки корекции

  5. @Genchev

    Аз пък не бих казал, че тази концепция е наивна. Напротив, тъкмо обратното – да се смята, че затворен/obscure код ще държа настрана „лошите“ е заблудата, с която обществото има проблем.

    Както Вие казвате в собствения си коментар, „един опитен чукча[…] почти гарантирано ще намери [слабост в дадена система]“, ако я търси достатъчно упорито – независимо от това колко една система е защитена.

    В този ред на мисли, законът е на наша страна, защото, както вече уточнихме, решените на злоупотреба ще се опитват да осъществят плановете си тъй или иначе; докато добронамерените „стражи“ биха вършили своя одит и биха внедрявали работещи решения много по-лесно, когато няма препятствия между тях и кода, които „вардят“.

  6. @Дрейк,

    Приятелю, не искам да изпадаме в полемики и още по-малко да те нападам под каквато и да е форма, която би приел лично, но спсиания ли четеш, докато пишеш или работиш като маркетинг човек?
    Ако един както ти се изрази – „лош“ човек успее да източи лична информация на 100,00 човека, цялата тази идеология вече е фейлнала. Само един единствен такъв случаи е недупостим.
    Ти ще тръгнеш ли да четеш ред-по-ред кода на всеки държавен продукт? А после ще следиш ли commit changesetовете към него при всеки такъв и да го съпоставяш със съществуващата база? Познаваш ли хора, които биха го правили системно ? А когато тези продукти са стотици редове? А милиони? А десетки милиони? Защото един добре мотивиран „лош човек“ – ще го направи – и му е нужно да го направи еднократно.

    Хора, живеете в много измислен свят. И на мен ми се иска нещата да са както ги говорите, но е редно да се замислите малко по-реалистично.

    Аргумент, който е валиден, е че в момента държавния софтуер е тотален шит, но нека не местим причината. Шит opensource software бол, както и качествен proprietary software – бол.

    Дано сте прави. В този случай, ЖЕЛАЯ да греша.

    Cheers. 🙂

  7. Вие сигурно знаете, че изграждането на една голяма софтуерна система предполага употребата на множество компоненти (на трети фирми), които могат да се закупят от фирмата производител и да се ползват в крайния софтуер. Тези компоненти честo са изключително функционални и дават голяма свобода на крайните потребители на системите (разработката им може да надхвърли по сложност самия софтуер, който за който се купуват). Напрактика този закон ще забрани употребата на такива и това ще означава употребата на абсолютния минимум компоненти (фирмите ще трябва да реализират сами всичко) или само такива, с отворен код, ако ги има.

    От друга страна, ако за това се прави изключение (това което сте написал за лицензите), тогава изпълнителите ще могат да заключват ключова функционалност във въпросните компоненти и това ще обезмисли идеята.

    Бих искал да попитам и за следното: Какво според закона е ‘отворен код’? Например междинния код генериран от платформи като .NET (IL code) счита ли се за отворен, все пак теоритично е възможно да се пише и на него? И още обфускирания код счита ли се за отворен (закона ще задължава ли производителите да кръщават имената на функциите и променливите по определен начин)?

    Като цяло идеята за отворен код изглежда добра – по-висока надеждност, по-добра поддръжка, но ми се струва трудно приложима, ако фирмите решат да скрият кода си.

  8. Да, „затворени“ библиотеки ще могат да се ползват. И да, това ще е възможност за затваряне на част от кода, но за някои неща е доста ясно дали са разработени в рамките на проекта или са общ компонент. Ако пък фирмите решат да крият целия код в уж „библиотеки“, то за какво точно ще са взели парите, ако кодът, написан по проекта е 0? Веднага ще следва финансова корекция.

    IL code, байткод и подобни не се броят, естествено. Обвускирането не се прави в code-base-а, а по време на build, евентуално, така че няма проблем там.

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *