Запуск новая версия проекта «Космополитен 2.0», которая разрабатывает стандартную библиотеку C и универсальный формат исполняемого файла, который можно использовать для распространения программ для разных операционных систем без использования интерпретаторов и виртуальных машин.
Контейнер генерировать универсальные исполняемые файлы основан на объединении определенных сегментов и заголовков из разных систем операционных систем в один файл, объединяющий несколько различных форматов, используемых в Unix, Windows и macOS.
Чтобы убедиться, что один исполняемый файл работать в системах Windows и Unix, используется трюк для кодирования файлов Windows PE в качестве сценария оболочки, используя тот факт, что Thompson Shell не использует маркер сценария «#!».
Для создания программ, включающих несколько файлов (объединяющих все ресурсы в один файл), поддерживается создание исполняемого файла в виде специально созданного ZIP-архива. Схема предлагаемого формата (пример приложения hello.com):
Вызов qemu-x86_64 предусмотрен для дополнительной переносимости. и позволяет коду, скомпилированному для архитектуры x86_64, работать на платформах, отличных от x86, таких как платы Raspberry Pi и устройства Apple, оснащенные процессорами ARM. Также проект можно использовать для создания автономных приложений, работающих без операционной системы (голое железо). В таких приложениях к исполняемому файлу присоединяется загрузчик, а программа выступает в роли загружаемой операционной системы.
Главные новинки Cosmopolitan 2.0
В этой новой версии подчеркивается, что изменена схема доступа к внутренним ресурсам в из zip-файла (при открытии файлов теперь используются обычные пути /zip/… вместо использования префикса zip:..). Точно так же для доступа к дискам в Windows можно использовать пути типа «/c/…» вместо «C:/…».
Предлагается новый загрузчик APE (Actually Portable Executable), определяющий формат универсальных исполняемых файлов. Новый загрузчик использует mmap для размещения программы в памяти и больше не меняет содержимое на лету. При необходимости универсальный исполняемый файл можно преобразовать в обычные исполняемые файлы, привязанные к отдельным платформам.
В Linux можно использовать модуль ядра binfmt_misc. для запуска программ APE. Отмечается, что использование binfmt_misc является самым быстрым методом запуска, помимо Реализация функциональность системных вызовов залог() и опубликовать(), разработанная проектом OpenBSD, а также предоставление API для использования данных вызовов в программах на C, C++, Python и Redbean, а также утилита от promise.com изолировать произвольные процессы.
Мы также можем найти, что для Linux увеличена производительность вызовов clock_gettime и gettimeofday до 10 раз за счет использования механизма vDSO (Virtual Dynamic Shared Object), позволяющего перенести обработчик системных вызовов в пространство пользователя и обойти контекст переключения.
В сборке используется Landlock Make, выпуск GNU Make с более строгой проверкой зависимостей и использованием системного вызова Landlock для изоляции программы от остальной системы и повышения эффективности кэширования. Как вариант сохраняются возможности компилятора и обычный GNU Make.
С другой стороны, он также подчеркивает реализованы функции для многопоточности: _spawn() и _join(), которые являются универсальными привязками к конкретным API для разных операционных систем. Также ведется работа по реализации поддержки потоков POSIX.
Из других изменений, которые выделяются:
- Добавлена поддержка параметров «-ftrace» и «-strace» для исполняемых файлов для отправки информации обо всех вызовах функций и системных вызовов в stderr.
- Добавлена поддержка системного вызова closefrom(), совместимого с Linux 5.9+, FreeBSD 8+ и OpenBSD.
- Математические функции для работы с комплексными числами перенесены из библиотеки Musl.
- Многие математические функции были ускорены.
- Предлагается функция nointernet(), которая отключает сетевые возможности.
- Добавлены новые функции для эффективного добавления строк: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf и vappendf.
- Добавлена защищенная версия семейства функций kprintf(), предназначенная для работы с повышенными привилегиями.
- Значительно улучшена производительность реализаций SSL, SHA, curve25519 и RSA.
Наконец, если вам интересно узнать об этом больше, вы должны знать, что код проектаили распространяется по лицензии ISC (упрощенная версия MIT/BSD).