Встречайте новую версию Cosmopolitan 2.0, кроссплатформенной стандартной библиотеки C

Запуск новая версия проекта «Космополитен 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).


Оставьте свой комментарий

Ваш электронный адрес не будет опубликован. Обязательные для заполнения поля помечены *

*

*

  1. Ответственный за данные: AB Internet Networks 2008 SL
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.