Вічний Linux: збереження програм на тисячу років
Вічний Linux: як зберегти програмне забезпечення на тисячу років
19 січня 2038 року Linux зупиниться. 3 липня 2486 року це повториться. А що станеться у 3026-му? Команда розробників проєкту Eternal Software Initiative працює над незвичайним рішенням: вони створюють віртуальну машину настільки просту, що людина майбутнього зможе відтворити її за коротким описом і запустити на ній сучасний Linux. Метою проєкту є збереження програмного забезпечення не на десятиліття, а на тисячоліття. Перше, що пропонується зробити після завантаження системи, — запустити DOOM.
Чому звичайні методи збереження не працюють
Проблема архівації програмного забезпечення виявляється глибшою, ніж здається. Сучасні програми залежать від безлічі компонентів: операційних систем, бібліотек, компіляторів, фреймворків, апаратного забезпечення, мікропрограм, форматів файлів та неявних припущень своєї епохи.
Збереження лише бінарного файлу часто виявляється недостатнім. Навіть емулятори з часом стають складними артефактами, які майбутнім поколінням доведеться розшифровувати. Виникає замкнене коло: для запуску старого коду потрібен емулятор, для запуску емулятора — платформа, а для платформи — ще одна платформа. Проєкт Eternal пропонує розірвати це коло, зменшивши складність до мінімуму.
Одна інструкція для всієї машини
Основа Eternal — Eternal Computer, свідомо спрощена віртуальна машина, побудована навколо єдиної інструкції Subleq. Вона віднімає одне число від іншого та визначає подальші дії залежно від результату: якщо він менший або дорівнює нулю, виконується перехід до наступної команди. Теоретично будь-який алгоритм можна реалізувати за допомогою Subleq — це доведено в теорії обчислень. На практиці опис такої машини вміщується в кількох абзацах. Людина 3026 року, яка знайде цей опис, зможе відтворити машину на будь-якому носії — від кремнієвого чіпа до механічного пристрою.
Як це працює зсередини
Проєкт використовує модифіковану версію Subleq+ з бекендом LLVM, портом ядра Linux, середовищами виконання C і C++, бібліотекою uClibc-ng, BusyBox та референсною віртуальною машиною. Результатом є самодостатня Linux-капсула, яка завантажується до командного рядка всередині цієї мінімалістичної системи.
Eternal пакує програмне забезпечення у так звані «капсули» — кожна містить операційну систему, бібліотеки, застосунки та всі залежності в одному архіві. У GitHub-репозиторії проєкту є інструкції зі збирання віртуальної машини, розпакування образу Linux, запуску системи та навіть запуску DOOM у ній.
«Eternal не призначений для практичного використання як дистрибутив Linux і не претендує на цю роль. Це не заміна QEMU, не нова настільна платформа і не реалістичний спосіб запуску повсякденних програм. Його справжня цінність — у питанні, яке він порушує: наскільки простим має бути комп’ютер, щоб збереження програмного забезпечення тривало століттями, а не десятиліттями?» — зазначається в описі проєкту.
Проблема 2038 року та довготривале виживання Linux
Тема довгострокового збереження Linux має не лише філософський, а й технічний аспект. Так звана проблема Y2K38 полягає в тому, що системи, які зберігають час як 32-бітне ціле число секунд від 1 січня 1970 року, не зможуть обробляти дати після 03:14:07 UTC 19 січня 2038 року — коли це число переповниться. Часткові рішення, як-от «великі часові мітки» у файловій системі XFS (введені в Linux 5.10), лише відкладають проблему до 2486 року.
Повний перехід на 64-бітний time_t теоретично забезпечує запас на близько 292 мільярди років, але стосується лише частини програмного стеку. Eternal вирішує інший рівень проблеми: навіть якщо Linux технічно справлятиметься з часовими мітками через тисячу років, хто і на чому його запустить? Саме це питання проєкт розглядає з несподіваною серйозністю.
Чи реальна мета на тисячу років?
Тисяча років — це термін, за який зникали цивілізації, мови та матеріали. Проте проєкт не претендує на практичність: це радше експеримент на межі простоти. Якщо у 3026 році хтось знайде опис машини з однією інструкцією та набір капсул, Linux завантажиться. І першим, що побачить нащадок, буде командний рядок. А якщо захоче — зможе запустити DOOM.