- GCC 16 integra suport natiu per a Picolibc, una libc C ultralleugera orientada a sistemes encastats.
- La integració afegeix targets
*-picolibc-*i noves opcions com--oslib=,--crt0=y--printf=. - Picolibc redueix de forma notable la mida de microprogramari davant de Newlib i Newlib-nano, clau per a IoT i edge.
- GCC 16 combina aquest suport amb millores en arquitectures modernes i C++20 per defecte, reforçant el seu paper a l'ecosistema embegut.

L'arribada de GCC 16 amb suport nadiu per a Picolibc està aixecant força expectació en el món del desenvolupament embegut . No és només “una altra versió” del compilador de sempre, sinó un pas important cap a toolchains molt més lleugers i afinats per a microcontroladors, dispositius IoT i sistemes de vora on cada byte compta.
Darrere d'aquest moviment hi ha el veterà desenvolupador Keith Packard, molt conegut pel seu treball a X.Org , que des de fa anys impulsa Picolibc com a biblioteca estàndard C minimalista per a sistemes encastats. Amb la seva integració a GCC 16, s'acaba finalment la necessitat de pegats casolans, configuracions rares i hacks per enllaçar aquesta libc: Picolibc passa a ser un ciutadà de primera dins l'ecosistema GCC.
Què és Picolibc i per què s'integra a GCC 16
Picolibc és una biblioteca estàndard C ultralleugera pensada específicament per a sistemes encastats de 32 i 64 bits. Va néixer de la convergència i refactorització de Newlib i AVR Libc, amb una idea clara: reduir al màxim el consum de ROM i RAM sense renunciar a les funcions essencials del llenguatge C.
Al contrari que altres alternatives més pesades, Picolibc està dissenyada perquè l' enllaçador pugui descartar amb facilitat el codi que no es fa servir , oferint un control molt fi sobre quines parts de la biblioteca acaben realment al binari final. Això encaixa de meravella en microcontroladors on lemmagatzematge es mesura en uns pocs kilobytes i cada secció de codi de més suposa cost, consum i complexitat addicionals.
Fins ara, fer servir Picolibc amb GCC implicava muntar-se un toolchain gairebé a mà : compilar la biblioteca, ajustar el sysroot, tocar scripts d'arrencada, aplicar pegats, etc. El resultat era potent, però la fricció tirava enrere molts equips. Amb GCC 16, aquest escenari canvia de forma radical, ja que el compilador inclou suport directe i oficial per a aquesta libc embeguda.
La clau és que l'arbre de codi de GCC 16 incorpora els canvis necessaris per reconèixer targets del tipus *-picolibc-* i l'opció de configuració --with-picolibc. D'aquesta manera, en construir el compilador o fer servir un toolchain ja preparat, Picolibc passa a ser una opció suportada de fàbrica, sense bricolatge al voltant.
Integració de Picolibc a GCC 16: detalls i opcions noves
El pegat que s'ha fusionat al repositori de GCC 16 no només afegeix el reconeixement de Picolibc com a libc alternativa: introdueix també opcions específiques del compilador pensades per treure partit a aquest entorn lleuger en sistemes encastats.
D'una banda, GCC ara pot treballar sense problemes amb targets de l'estil *-picolibc-* (Per exemple, arm-none-picolibc-eabi). A més, en compilar GCC és possible passar --with-picolibc perquè el configurador prepari l'entorn amb aquesta biblioteca com a destinació principal, gestionant sysroot, headers i fitxers d'arrencada acords a Picolibc.
Al costat d'aquesta integració bàsica, el pegat exposa una sèrie d' opcions addicionals molt interessants quan es compila per a Picolibc:
--oslib=: permet seleccionar diferents mòduls que implementen la interfície amb el sistema operatiu o entorn d'execució, cosa clau si estàs en bar metall, amb RTES lleuger o en simuladors.--crt0=: especifica el fitxer d'arrencada de C (crt0) a utilitzar, cosa que dóna marge per adaptar la seqüència d'arrencada cada placa, bootloader o requisits d'inicialització.--printf=: ofereix triar entre una implementació completa deprintfo variants retallades, per exemple versions minimalistes centrades en sencers que estalvien una quantitat notable de memòria de programa.
Aquesta darrera opció sol marcar molta diferència en projectes reals: la família de funcions printf sol ser molt pesat de la libc. Poder optar per una versió reduïda, conservant potser només el necessari per a logs bàsics a UART, permet que el binari final sigui molt més compacte, una cosa vital en dispositius de molt baix cost.
En alguns fluxos també s'utilitzen macros i banderes com -Dsystem-libc i configuracions de sysroot associades a Picolibc, de manera que el compilador consideri aquesta biblioteca com la implementació per defecte de la libc sense haver d'afegir desenes de flags a cada invocació de GCC.
El camí cap a la “libc diversity” a GCC
La incorporació de Picolibc a GCC 16 no ha sorgit del no-res; ve precedida per un debat dins del propi projecte GCC sobre la necessitat de fomentar la diversitat de biblioteques C suportades de manera oficial. Fa aproximadament un any ja es parlava a les llistes de correu d'habilitar diferents libcs adaptades a contextos concrets, i Picolibc apareixia com a candidata clara per al món embegut.
Durant aquest temps, Keith Packard ha anat polir i remetre successives versions del pegat a la llista gcc-patches, ajustant la integració perquè complís amb els estàndards de qualitat i manteniment del compilador. La discussió amb els mantenidors de GCC ha anat refinant detalls com ara la selecció de targets, l'organització dels fitxers de suport o l'ús d'opcions personalitzades.
El resultat d‟aquest procés col·laboratiu és una integració que no és un simple pegot, sinó una extensió ben alineada amb l‟arquitectura interna de GCC . Això reforça la idea de “libc diversity”: ara, a més de les combinacions habituals amb glibc, Newlib o uClibc en certs entorns, Picolibc se suma com a alternativa lleugera i mantinguda dins del propi arbre de GCC.
Aquest enfocament encaixa molt bé amb les tendències actuals de la indústria, on proliferen arquitectures com ara RISC-V, nous perfils d'ARMv9 i SoC especialitzats per a aplicacions concretes. Disposar d'una libc modular i minimalista facilita que el mateix compilador pugui adaptar-se tant a un servidor potent com a un node sensor amb uns quants kilobytes de flaix.
Relació amb Newlib, Newlib-nano i altres libcs lleugeres
Per entendre què aporta Picolibc, convé veure'l en context davant d'altres opcions clàssiques. Newlib ha estat durant molts anys la referència de libc per a entorns embeguts basats en GCC, i n'han derivat variants com Newlib-nano, orientada a reduir una mica la mida a costa de retallar funcionalitats.
Picolibc parteix d'aquests mateixos orígens, però aplica un redisseny més agressiu i centrat en la modularitat . La idea no és només fer una Newlib “una mica més petita”, sinó reestructurar-la perquè els enllaçadors moderns puguin eliminar amb molta més precisió el codi que no es fa servir, millorant al màxim la relació entre funcionalitat inclosa i espai ocupat.
Segons anàlisi de la comunitat (per exemple, comparatives publicades en blocs de desenvolupament embegut), el salt a Picolibc pot suposar reduccions notables d'ús de flaix, mida de binari, pila i heap davant de Newlib i la seva variant nano. Això es tradueix en la pràctica en poder ficar més lògica d'aplicació al mateix micro, o bé baixar a un microcontrolador amb menys memòria, abaratint el maquinari.
Alhora, el projecte Picolibc no es queda ancorat en allò bàsic: al seu repositori es pot veure com s'afegeix suport a targets de 16 bits, millores en la compatibilitat POSIX i refinaments diversos que el tornen atractiu també per a arquitectures no tan exòtiques: ARM Cortex-M, RISC-V, .
Comparat amb altres alternatives lleugeres com dietlibc o diferents nanolib, Picolibc aposta per un equilibri entre mida i compliment d'estàndards que encaixa especialment bé en projectes on s'exigeixen API consistents, proves intensives i, alhora, un footprint molt contingut.
Com aprofitar Picolibc en un flux de treball embegut
La integració a GCC 16 es tradueix en canvis molt concrets en el dia a dia d'un desenvolupador de microprogramari. Per veure-ho clar, imaginem un projecte típic per ARM Cortex-M amb compilació creuada des d'un PC de desenvolupament. Tradicionalment es tirava de toolchains tipus arm-none-eabi basats en Newlib o SDKs propietaris del fabricant del micro.
Amb GCC 16, es pot construir o descarregar un toolchain que ja porti un target arm-none-picolibc-eabi. En configurar el compilador amb l'opció --with-picolibc, l'entorn queda preparat per utilitzar aquesta libc com a estàndard, amb els headers, el sysroot i els fitxers d'arrencada adequats.
A partir d'aquí, la compilació es fa emprant el nou prefix, per exemple arm-none-picolibc-eabi-gcc, juntament amb les flags habituals d'optimització i depuració. Si voleu afinar encara més la mida, podeu utilitzar l'opció --printf= per seleccionar la variant de printf més lleugera que compleixi les necessitats del projecte.
En entorns amb Make, CMake o altres sistemes de build, el canvi sol limitar-se a ajustar la definició del toolchain: indicar el nou prefix, adaptar potser algunes opcions d'enllaç i revisar que els scripts d'arrencada (crt0) i els fitxers de linker script encaixin amb l'organització de Picolibc. En molts casos, aquest ajustament és molt menor que el que implica passar d'un SDK de fabricant a un toolchain GCC “pur”.
Aquest flux aplana el camí per abandonar entorns propietaris o tancats, guanyar portabilitat entre diferents famílies de microcontroladors i mantenir un toolchain 100% obert i auditable , cada cop més valorat en sectors com l'industrial, el metge o el d'automoció.
Impacte a IoT, edge computing i sectors regulats
El timing d'aquesta integració no és casual: coincideix amb una expansió brutal dels dispositius IoT i sistemes de vora que operen amb recursos molt ajustats, sovint alimentats per bateria i desplegats en massa. En aquest tipus descenaris, estalviar memòria de programa permet, simplement, utilitzar microcontroladors més barats i retallar costos per unitat de forma significativa.
En reduir la mida de microprogramari, també se simplifiquen temes com les actualitzacions OTA , on cada kilobyte menys implica transmissions més ràpides, menys consum energètic i menor probabilitat d'errors en xarxes inestables. Picolibc, en permetre binaris molt més compactes quan es combina amb GCC 16, té un impacte directe en aquest tipus d'operacions.
En indústries regulades (sanitat, automoció, ferroviari…), els avantatges també es deixen notar. Tot i que la certificació formal d'una libc requereix eines i processos específics, el fet de comptar amb una biblioteca petita, modular i relativament fàcil d'auditar facilita el camí per oferir toolchains certificats o sotmesos a revisions exhaustives de seguretat.
Alhora, aquesta aposta per Picolibc encaixa amb la tendència cap a toolchains de silici oberts , com passa a l'ecosistema RISC-V. En aquests entorns, no només es vol que la ISA sigui oberta, sinó que també el compilador, la libc i la resta de la cadena d'eines siguin transparents i mantinguts per la comunitat.
La combinació de GCC 16, suport per a arquitectures modernes (ARMv9.6-A, RISC-V, noves generacions de x86 com AMD Zen 6 o processadors d'Intel de nova fornada) i Picolibc com a libc lleugera reforça el compilador de GNU com a pilar central per a una nova onada de dispositius intel·ligents.
Estat de GCC 16, altres novetats i maduresa del suport
GCC 16 està previst com a gran versió del compilador en el seu cicle típic de llançaments , amb una finestra aproximada de sortida entre març i abril si tot va segons el planejat pels mantenidors. En el moment en què es va confirmar l'entrada a la fase final de desenvolupament (stage 4), el focus va passar a centrar-se únicament en documentació i correcció de regressions , sense admetre noves característiques excepte excepcions molt justificades.
A l'informe més recent, s'esmentava que quedaven per resoldre diverses regressions de prioritat P1 , que són els errors més crítics. Fins que el nombre daquests bugs arribi a zero oa un nivell acceptable, no es generaran els primers candidats a llançament (release candidats) de GCC 16.1. Aquesta disciplina garanteix que el suport per a Picolibc arribi en un estat prou madur per començar a fer-se servir en projectes reals.
A més del suport per a Picolibc, GCC 16 incorpora un bon grapat de novetats: suport per al target Armv9.6-A, implementació inicial per a l'arquitectura AMD Zen 6 (identificada com Znver6) amb les seves noves capacitats d'ISA, millores en la gestió de memòria gestionada a GPUs AMD, suport per a processadors Intel de propera generació com Nova Lake i Wildcat Lake, i un increment en el nombre de particions per defecte a LTO (Link Time Optimization), entre altres millores.
En el pla del llenguatge, una de les decisions més visibles és que C++20 passa a ser l'estàndard per defecte quan no se n'especifica un altre. S'hi afegeix fins i tot un front-end nou per al llenguatge Algol 68, ampliant la llista de llenguatges suportats per GCC. Tot plegat es combina amb correccions de bugs i petites optimitzacions repartides pels diferents backends.
Vist en conjunt, GCC 16 no és només “la versió on entra Picolibc”. És un fort llançament a nivell de suport arquitectònic, modernització de C++ i capacitats per a maquinari actual, on la incorporació d'una libc lleugera forma part d'una estratègia més àmplia d'adaptació a les necessitats modernes del desenvolupament, tant en escriptori com, sobretot, en sistemes encastats.
Les comunitats tècniques i mitjans especialitzats han anat recollint aquestes novetats: des d'articles centrats en el suport de Picolibc i la idea de “libc diversity” fins a anàlisis sobre les implicacions de noves arquitectures com AMD Zen 6, passant per discussions en xarxes socials sobre com aprofitar GCC 16 en projectes que van des de consoles retro fins a control industrial.
Tot apunta que, a mesura que s'acosti el llançament final de GCC 16.1 i s'estabilitzin els primers toolchains amb Picolibc integrat, veurem més casos d'ús reals, proves comparatives de mida i rendiment, i guies pràctiques sobre bar-metall, scripts de linker i seqüències d'arrencada específiques usant aquesta nova combinació.
El suport de Picolibc a GCC 16 suposa un punt d'inflexió per a l'ecosistema embegut: redueix dràsticament la fricció per adoptar una libc ultralleugera, obre la porta a firmwares més petits i mantenibles i encaixa amb la tendència general cap a toolchains oberts, configurables i adaptats a arquitectures molt diverses. Per a molts equips de desenvolupament, val la pena començar a provar ja les branques de GCC 16 amb Picolibc, mesurar l'impacte en mida, rendiment i manteniment, i valorar-ne la incorporació als propers productes que hagin de sortir al mercat.
Índex
- 1 Què és Picolibc i per què s'integra a GCC 16
- 2 Integració de Picolibc a GCC 16: detalls i opcions noves
- 3 El camí cap a la “libc diversity” a GCC
- 4 Relació amb Newlib, Newlib-nano i altres libcs lleugeres
- 5 Com aprofitar Picolibc en un flux de treball embegut
- 6 Impacte a IoT, edge computing i sectors regulats
- 7 Estat de GCC 16, altres novetats i maduresa del suport