Si Keith Packard, isang aktibong developer Debian, ang pinuno ng proyektong X.Org at tagalikha ng maraming X extension, kabilang ang XRender, XComposite, at XRandR, paglabas ng bagong karaniwang C library , na binuo para gamitin sa mga naka-embed na device na may limitadong storage at RAM. Sa panahon ng pag-unlad, ang ilang code ay hiniram mula sa library mula sa proyekto ng Cygwin at , na binuo para sa Atmel AVR microcontrollers. PicoLibc code Lisensyado sa ilalim ng lisensya ng BSD. Ang gusali ng library ay sinusuportahan para sa mga arkitektura ng ARM (32-bit), i386, RISC-V, x86_64, at PowerPC.
Sinimulan ni Keith Packard ang pagbuo ng libc library matapos mabigong makahanap ng angkop na implementasyon ng Libc na angkop para sa mga naka-embed na device na may limitadong RAM. Ang proyekto ay isinasagawa na mula noong nakaraang taon. Sa simula, ito ay isang variant ng newlib, na pinapalitan ang mga function ng stdio ng isang compact na bersyon mula sa avrlibc (ang stdio ng newlib ay hindi kasiya-siya dahil sa pagkonsumo ng resource nito). Dahil ang kasalukuyang gawain ni Keith ay kinabibilangan ng patuloy na pagtatrabaho sa arkitektura ng RISC-V at ang pagbuo ng mga toolchain para sa mga naka-embed na device, kamakailan ay sinuri niya ang estado ng mga implementasyon ng libc at napagpasyahan na, sa pamamagitan ng ilang maliit na pagpipino, ang isang kumbinasyon ng newlib at avrlibc ay maaaring maging isang mahusay at unibersal na solusyon. Ang proyekto ay unang binuo sa ilalim ng pangalang "newlib-nano," ngunit upang maiwasan ang kalituhan sa Newlib library, pinalitan ito ng pangalang PicoLibc.
Sa kasalukuyang anyo nito, tinanggal na sa Picolibc ang lahat ng code na walang lisensya mula sa BSD (hindi ginamit ang code na ito sa pagbuo para sa mga naka-embed na device), na lubos na nagpasimple sa sitwasyon ng paglilisensya ng proyekto. Ang pagpapatupad ng mga lokal na thread ay inilipat mula sa 'struct _reent' patungo sa mekanismo ng TLS (). Isang compact stdio variant, na hiniram mula sa avrlibc library code, ang pinapagana bilang default (ang ATmel-specific assembly code ay muling isinulat sa C). Ang Meson toolchain ay ginagamit para sa pagbuo, na nag-aalis ng pangangailangan para sa dependency sa mga newlib build script at nagpapadali sa paglipat ng mga pagbabago mula sa newlib. Isang pinasimpleng initialization code (crt0) ang naidagdag, ikinabit sa executable at isinagawa bago ilipat ang kontrol sa main() function.
Sa Picolibc bersyon 1.1:
- Nagdagdag ng helper library upang suportahan ang "teknolohiya"", na nagpapahintulot sa code na tumatakbo sa isang debugger o emulator environment na gamitin ang mga mekanismo ng I/O ng host system;
- Para sa mga sistemang sumusuporta sa open, close, read, at write system calls, ang tinystdio ay nagdaragdag ng standardized POSIX stdio I/O interfaces, kabilang ang fopen at fdopen functions, at nagbibigkis sa stdin/stdout/stderr sa mga POSIX-defined file descriptors;
- Ang mga kamakailang pagbabago mula sa newlib codebase ay nai-port na. Kabilang dito ang pagdaragdag ng mga libm stubs para sa , na maaaring gamitin sa mga sistemang walang suporta sa floating-point;
- Nagdagdag ng halimbawa ng pagbuo ng aplikasyong "Hello world" gamit ang picolibc para sa mga sistemang ARM at RISC-V;
- Tinanggal ang mga direktoryong newlib, libm, at mathfp, na naglalaman ng hindi nagamit na experimental code.
Pinagmulan: opennet.ru
