Кіт Паккард (Keith Packard), активний розробник Debian, лідер проекту X.Org та творець безлічі X-розширень, включаючи XRender, XComposite та XRandR, випуск нової стандартної Сі-бібліотеки , що розвивається для застосування на вбудовуваних пристроях з обмеженим розміром постійного сховища та оперативної пам'яті. При розробці частина коду запозичена з бібліотеки від проекту Сygwin та , що розвивалася для мікроконтролерів Atmel AVR. Код PicoLibc під ліцензією BSD. Підтримується збірка бібліотеки для архітектур ARM (32-bit), i386, RISC-V, x86_64 та PowerPC.
Кіт Паккард приступив до розробки після того, як не зміг знайти гідного варіанту Libc, який можна було використовувати на пристроях, що вбудовуються з невеликим ОЗУ. Проект розвивається з минулого року. На першому етапі проект був варіантом newlib, функції stdio в якому були замінені на компактний варіант з avrlibc (stdio в newlib не влаштовував великим споживанням ресурсів). Так як поточна діяльність Кита пов'язана з постійною роботою з архітектурою RISC-V та розвитком інструментарію для вбудованих пристроїв, нещодавно він переглянув стан реалізацій libc і дійшов висновку, що при невеликій доробці комбінація newlib і avrlibc може стати гарним універсальним рішенням. Спочатку проект розвивався під ім'ям "newlib-nano", але щоб уникнути плутанини з бібліотекою Newlib був перейменований на PicoLibc.
У поточному вигляді в Picolibc вже проведено роботу з видалення всього коду, що поставляється не під ліцензією BSD (цей код не використовувався при складанні для вбудованих пристроїв), що значно спростило ситуацію з ліцензією на проект. Реалізація локальних потоків переведена з 'struct _reent' на механізм TLS (). Активовано за замовчуванням компактний варіант stdio, запозичений із коду бібліотеки avrlibc (специфічні для ATmel асемблерні вставки переписані на Сі). Для складання задіяний інструментарій Meson, що дозволило не прив'язуватися до складальних сценаріїв newlib і спростити перенесення змін із newlib. Доданий спрощений варіант коду ініціалізації (crt0), що прикріплюється до файлу і виконується до передачі управління функції main().
У версії Picolibc 1.1:
- Додано допоміжну бібліотеку для підтримки технології ««, що дозволяє коду, що виконується в оточенні відладника або емулятора, використовувати механізми введення/виведення хост-системи;
- Для систем, що підтримують системні виклики open, close, read і write, до tinystdio додані стандартизовані POSIX-інтерфейси вводу/виводу stdio, включаючи функції fopen і fdopen, а також прив'язку stdin/stdout/stderr до певних у POSIX файлових дескрипторів;
- Перенесено нещодавні зміни з кодової бази newlib. У тому числі додані заглушки libm для які можна використовувати на системах без підтримки обчислень з плаваючою точкою;
- Доданий приклад складання програми Hello world з picolibc для систем ARM і RISC-V;
- Видалено каталоги newlib, libm і mathfp, в яких містився експериментальний код, що не використовується.
Джерело: opennet.ru
