Keith Packard, aktivní vývojář Debianu, vedoucí projektu X.Org a tvůrce mnoha X rozšíření, včetně XRender, XComposite a XRandR, novou standardní C knihovnu , která je vyvíjena pro použití na vestavných zařízeních s omezenou velikostí trvalého úložiště a operační paměti. Při vývoji byla část kódu převzata z knihovny z projektu Cygwin a , která byla vyvíjena pro mikrokontroléry Atmel AVR. Kód PicoLibc je licencován pod licencí BSD. Knihovna je podpůrná pro architektury ARM (32-bit), i386, RISC-V, x86_64 a PowerPC.
Keith Packard začal vyvíjet po tom, co nenašel vhodnou variantu Libc, kterou by bylo možné použít na vestavných zařízeních s malou RAM. Projekt se vyvíjí od loňského roku. V první fázi projekt představoval variantu newlib, jejíž funkce stdio byly nahrazeny kompaktní variantou z avrlibc (stdio v newlib nevyhovovalo kvůli vysoké spotřebě zdrojů). Vzhledem k tomu, že aktuální činnost Keitha souvisí s neustálou prací s architekturou RISC-V a vývojem nástrojů pro vestavná zařízení, nedávno přehodnotil stav realizací libc a dospěl k závěru, že s malými úpravami může být kombinace newlib a avrlibc dobrým univerzálním řešením. Původně byl projekt vyvíjen pod názvem „newlib-nano“, ale aby se předešlo záměně s knihovnou Newlib, byl přejmenován na PicoLibc.
V aktuální verzi PicoLibc byla již provedena práce na odstranění veškerého kódu, který není poskytován pod licencí BSD (tento kód nebyl používán při sestavování pro vestavná zařízení), což výrazně usnadnilo situaci s licencí na projekt. Realizace lokálních vláken byla převedena z ‘struct _reent’ na mechanismus TLS (). Výchozí kompaktní varianta stdio, převzatá z kódu knihovny avrlibc, byla aktivována (specifické pro ATmel assemblerové vklady byly převedeny do C). Pro sestavení byl použit nástroj Meson, což umožnilo nezavázat se ke scénářům pro sestavení newlib a usnadnit přenos změn z newlib. Byla přidána zjednodušená varianta inicializačního kódu (crt0), který je připojen k spustitelnému souboru a vykonává se před předáním řízení funkci main().
Ve verzi PicoLibc 1.1:
- Byla přidána pomocná knihovna pro podporu technologie „«, která umožňuje kódu běžícímu v prostředí ladicího nebo emulačního nástroje využívat mechanismy vstupu/výstupu hostitelského systému;
- Pro systémy, které podporují systémové výskyty open, close, read a write, byly do tinystdio přidány standardizované POSIX rozhraní pro vstup/výstup stdio, včetně funkcí fopen a fdopen, a také byla provedena vazba stdin/stdout/stderr na konkrétní POSIX file deskriptory;
- Byly přeneseny nedávné změny z kódové základny newlib. Mezi ně patří přidání stubů libm pro , které lze použít v systémech bez podpory výpočtů s plovoucí desetinnou čárkou;
- Byl přidán příklad sestavení aplikace „Hello world“ s picolibc pro systémy ARM a RISC-V;
- Byly odstraněny adresáře newlib, libm a mathfp, které obsahovaly nepoužitý experimentální kód.
Zdroj: opennet.ru
