Стартирането на новата версия на проекта "Космополитен 2.0", който разработва стандартна C библиотека и универсален изпълним файлов формат, който може да се използва за разпространение на програми за различни операционни системи без използването на интерпретатори и виртуални машини.
Контейнерът за генериране на универсални изпълними файлове разчита на комбиниране на специфични сегменти и хедъри от различни системи операционни системи в един файл, съчетаващ няколко различни формата, използвани в Unix, Windows и macOS.
За да се гарантира това един изпълним файл работят на системи Windows и Unix, използва се трик за кодиране на Windows PE файлове като shell скрипт, възползвайки се от факта, че Thompson Shell не използва маркера на скрипта "#!".
За създаване на програми, които включват множество файлове (комбиниране на всички ресурси в един файл), се поддържа генериране на изпълним файл под формата на специално създаден ZIP архив. Схема на предложения формат (примерно приложение hello.com):
Обаждането qemu-x86_64 е предоставено за допълнителна преносимост и позволява кодът, компилиран за x86_64 архитектурата, да работи на различни от x86 платформи, като например Raspberry Pi платки и устройства на Apple, оборудвани с ARM процесори. Проектът може да се използва и за създаване на самостоятелни приложения, които работят без операционна система (bare metal). В такива приложения към изпълнимия файл е прикачен буутлоудър и програмата действа като стартираща операционна система.
Основни новости на Cosmopolitan 2.0
В тази нова версия е подчертано, че схемата за достъп до вътрешни ресурси е променена в от zip файл (при отваряне на файлове вече се използват обичайните пътища /zip/… вместо използването на префикса zip:..). По същия начин, за достъп до дискове в Windows е възможно да използвате пътища като "/c/…" вместо "C:/…".
Предлага се нов товарач APE (Всъщност Portable Executable), който дефинира формата на универсалните изпълними файлове. Новият буутлоудър използва mmap за разпределяне на програмата в паметта и вече не променя съдържанието в движение. Ако е необходимо, универсалният изпълним файл може да бъде преобразуван в обикновени изпълними файлове, свързани с отделни платформи.
В Linux е възможно да се използва модулът на ядрото binfmt_misc за стартиране на APE програми. Отбелязва се, че използването на binfmt_misc е най-бързият метод за стартиране, в допълнение към Реализация на функционалността на системните повиквания pledge() и unveil(), разработени от проекта 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).