Maak kennis met de nieuwe versie van Cosmopolitan 2.0, de platformonafhankelijke standaard C-bibliotheek

De lancering van de nieuwe versie van het project "Kosmopolitisch 2.0", dat een standaard C-bibliotheek en een universeel uitvoerbaar bestandsformaat ontwikkelt dat kan worden gebruikt om programma's voor verschillende besturingssystemen te distribueren zonder het gebruik van tolken en virtuele machines.

De houder om universele uitvoerbare bestanden te genereren vertrouwt op het combineren van specifieke segmenten en headers van verschillende systemen besturingssystemen in één bestand, waarbij verschillende indelingen worden gecombineerd die worden gebruikt in Unix, Windows en macOS.

Verzekeren dat een enkel uitvoerbaar bestand draaien op systemen Windows en Unix, een truc wordt gebruikt om Windows PE-bestanden te coderen als een shellscript, profiteren van het feit dat de Thompson Shell de scriptmarkering "#!" niet gebruikt.

Om programma's te maken die meerdere bestanden bevatten (waarbij alle bronnen in één bestand worden gecombineerd), wordt het ondersteund om een ​​uitvoerbaar bestand te genereren in de vorm van een speciaal vervaardigd ZIP-archief. Overzicht van het voorgestelde formaat (voorbeeld hello.com-toepassing):

De qemu-x86_64-aanroep is bedoeld voor extra draagbaarheid en maakt het mogelijk code die is gecompileerd voor de x86_64-architectuur te draaien op niet-x86-platforms, zoals Raspberry Pi-kaarten en Apple-apparaten die zijn uitgerust met ARM-processors. Het project kan ook worden gebruikt om stand-alone applicaties te maken die werken zonder een besturingssysteem (bare metal). In dergelijke toepassingen is een bootloader gekoppeld aan het uitvoerbare bestand en fungeert het programma als een opstartbaar besturingssysteem.

Belangrijkste nieuwigheden van Cosmopolitan 2.0

In deze nieuwe versie wordt dat benadrukt het schema voor toegang tot interne bronnen is gewijzigd in uit een zip-bestand (bij het openen van bestanden worden nu de gebruikelijke /zip/… paden gebruikt in plaats van het zip:.. prefix). Evenzo is het voor toegang tot schijven in Windows mogelijk om paden zoals "/c/..." te gebruiken in plaats van "C:/...".

Er wordt een nieuwe APE-lader voorgesteld (Eigenlijk Portable Executable), dat het formaat van universele uitvoerbare bestanden definieert. De nieuwe bootloader gebruikt mmap om het programma aan het geheugen toe te wijzen en verandert niet langer de inhoud on-the-fly. Indien nodig kan het universele uitvoerbare bestand worden omgezet in normale uitvoerbare bestanden die zijn gekoppeld aan individuele platforms.

Op Linux is het mogelijk om de binfmt_misc kernelmodule te gebruiken om APE-programma's uit te voeren. Opgemerkt wordt dat het gebruik van binfmt_misc de snelste opstartmethode is, naast: een implementatie van de functionaliteit van de belofte() en onthulling() systeemaanroepen, ontwikkeld door het OpenBSD-project, evenals het verstrekken van een API voor het gebruik van oproepgegevens in C-, C++-, Python- en Redbean-programma's, evenals een hulpprogramma van promise.com om willekeurige processen te isoleren.

Dat kunnen we ook vinden voor Linux zijn de prestaties van de clock_gettime en gettimeofday-oproepen verbeterd tot 10 keer dankzij het gebruik van het vDSO-mechanisme (Virtual Dynamic Shared Object), waarmee de systeemoproephandler naar de gebruikersruimte kan worden overgebracht en de schakelcontext wordt omzeild.

De build maakt gebruik van Landlock Make, een editie van GNU Make met strengere controle op afhankelijkheid en het gebruik van de Landlock-systeemaanroep om het programma te isoleren van de rest van het systeem en de efficiëntie van de cache te verbeteren. Als optie blijven de compilermogelijkheden en de gebruikelijke GNU Make behouden.

Aan de andere kant benadrukt het ook de geïmplementeerde functies voor multithreading: _spawn() en _join(), die universele bindingen zijn over specifieke API's voor verschillende besturingssystemen. Er wordt ook gewerkt aan de implementatie van ondersteuning voor POSIX-threads.

Van de andere veranderingen die opvallen:

  • Ondersteuning toegevoegd voor de opties “–ftrace” en “–strace” aan uitvoerbare bestanden om informatie over alle functie- en systeemaanroepen naar stderr te sturen.
  • Ondersteuning toegevoegd voor de systeemaanroep closefrom() die compatibel is met Linux 5.9+, FreeBSD 8+ en OpenBSD.
  • Wiskundige functies voor het werken met complexe getallen zijn verplaatst uit de Musl-bibliotheek.
  • Veel wiskundige functies zijn versneld.
  • De functie nointernet() wordt voorgesteld, die de netwerkmogelijkheden uitschakelt.
  • Nieuwe functies toegevoegd om strings efficiënt toe te voegen: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf en vappendf.
  • Een beschermde versie van de kprintf()-familie van functies, ontworpen om te werken met verhoogde privileges, is toegevoegd.
  • Aanzienlijk verbeterde prestaties van SSL-, SHA-, curve25519- en RSA-implementaties.

Tot slot, als u er meer over wilt weten, moet u weten dat de projectcodeof wordt gedistribueerd onder de ISC-licentie (vereenvoudigde versie van MIT/BSD).


Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: AB Internet Networks 2008 SL
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.