Для ядра Linux представлен набор патчей Popcorn Linux. Это программный стек, который позволяет приложениям с общей кодовой базой выполняться на распределённых хостах. То есть приложение можно запустить на одном хосте, а во время его выполнения выполнить миграцию на удалённый хост. Многопоточные приложения могут переносить любой свой поток на любой удалённый хост.
Более продвинутая версия Popcorn Linux позволяет приложениям одновременно выполняться на ядрах разной архитектуры (например, x86 и ARM). То есть, теоретически, часть программы можно запустить на ARM-ядре с низким энергопотреблением, а другой поток отправить на высокопроизводительное ядро x86.
В отличие от решений c перезапуском процессов по контрольным точкам (таких, как CRIU), Popcorn организует плавную и динамическую миграцию между хостами во время выполнения (без вмешательства пользователя) и обеспечивает согласованную виртуальную память между хостами для одновременного выполнения потоков.
Программу CRIU обычно используют для «горячей» миграции контейнеров между хостами. Если она передаёт процесс Linux в другую систему, поддерживая восстановление всех видов файловых дескрипторов и других состояний, то Popcorn Linux реализует распределённую общую память, расширяя подсистему виртуальной памяти Linux. Это позволяет процессам на разных машинах наблюдать общее и согласованное виртуальное адресное пространство. Согласованность страниц виртуальной памяти различных хостов обеспечивается с помощью протокола reader-replicate/writer-invalidate. Это значит, что страницы памяти реплицируются при чтении и аннулируются при записи.
Взаимодействие между хостами осуществляется при помощи работающего на уровне ядра обработчика сообщений, передаваемых через TCP-сокет. Транспорт TCP для передачи содержимого структур ядра и страниц памяти между хостами выбран как временное решение с целью упрощения отладки и тестирования. В будущем его обещают заменить на более эффективный транспорт.
Версия Popcorn Linux, представленная 4 мая 2020 года для включения в ядро, поддерживает только конфигурации x86. Программный стек в патчах содержит модифицированное ядро и библиотеку для выполнения в пользовательском пространстве.
Существует более продвинутая версия Popcorn Linux, которая позволяет приложениям одновременно выполняться на ядрах с разной архитектурой. Эта более функциональная версия добавляет в стек ещё модифицированные инструменты LLVM-компилятора.
В данный момент в ядро Linux предложена только более простая одноархитектурная версия Popcorn, которая не требует модификации компилятора. Исходный код гетерогенной реализации Popcorn Linux и компилятора опубликован на Github.
Можно отметить, что недавно состоялся анонс проекта Telefork, который тоже позволяет производить «телепортацию» процесса на другой компьютер наподобие CRIU и DMTCP, только проще — буквально одним вызовом API. При выполнении вызова
telefork
память и связанные с процессом структуры клонируются на другой хост, на котором запущен серверный обработчик telepad
. Telefork работает в пользовательском пространстве и не требует модификации ядра. Программа реализована в виде библиотеки Rust, хотя автор пишет, что теоретически вы можете обернуть программу в C API, а затем запустить через привязки FFI для телепортации даже питоновского процесса. Реализация составляет всего около 500 строк кода (плюс 200 строк комментариев). Как поясняет разработчик, это менее известный слой абстракции, который относительно легко выполняет то, что мы считали почти невозможным: «Телепортация вычислений может показаться невозможной или очень сложной. Вы могли подумать, что она потребует таких методов, как сериализация всего состояния, копирование двоичного исполняемого файла на удалённую машину и запуск его там со специальными флагами командной строки для перезагрузки состояния. Но нет, всё гораздо проще. Под вашим любимым языком программирования лежит слой абстракции, где вы можете выбрать довольно простое подмножество функций — и за выходные реализовать телепортацию большинства чистых вычислений на любом языке программирования в 500 строчках кода».
Система Popcorn Linux работает на более низком уровне абстракции. Её разработчики упоминают другие попытки на Linux заменить виртуальные машины чем-то вроде репликации ядер:
- Twin Linux (нет исходного кода)
- SHIMOS (Single Hardware with Independent Multiple Operating Systems), тоже нет исходного кода
- coLinux (предусматривает нативный запуск Linux под Windows XP и новее)
Из гетерогенных операционных систем можно вспомнить инновационную систему TaOS образца 1991 года, которая параллельно работает на процессорах любых архитектур: x86, ARM, SPARC, PowerPC и т. д. Сейчас создатель TaOS Крис Хинсли делает похожий опенсорсный проект ChrysaLisp: тоже своеобразный «виртуальный процессор», который распределяется по разным физическим CPU на разной архитектуре под MacOS, Windows, Linux для x64 и Linux для Aarch64.
Popcorn Linux можно использовать как единую операционную систему, в которой параллельно работают разные ядра Linux, а приложения запускаются параллельно на разном оборудовании. Если же запускать ядра независимо друг от друга с изоляцией приложений, то Popcorn Linux представляет собой альтернативу виртуальным машинам.
Popcorn Linux — совместная разработка научно-исследовательской группы программного обеспечения и систем в Политехническом университете Виргинии, основанная на диссертации Дэвида Каца (сентябрь 2014 года, pdf).