Опубликован релиз стандартной Си-библиотеки PicoLibc 1.8.9, развиваемой Китом Паккардом (Keith Packard, лидер проекта X.Org) для применения на встраиваемых устройствах с ограниченным размером постоянного хранилища и оперативной памяти. При разработке часть кода заимствована из библиотеки newlib от проекта Сygwin и AVR Libc, развивавшейся для микроконтроллеров Atmel AVR. Код PicoLibc распространяется под лицензией BSD. Поддерживается сборка библиотеки для архитектур ARM (32-bit), Aarch64, i386, RISC-V, x86_64, m68k, PowerPC, LatticMico32, LoongArch и OpenRisc.
Изначально проект развивался под именем “newlib-nano” и был нацелен на переработку некоторых ресурсоёмких функций Newlib, которые было проблематично использовать на встраиваемых устройствах с небольшим ОЗУ. Например, в PicoLibc функции stdio заменены на компактный вариант из библиотеки avrlibc. Код также вычищен от неиспользуемых в сборке для встраиваемых устройств компонентов, поставляемых не под лицензией BSD. Добавлен упрощённый вариант кода инициализации (crt0), а реализация вызовов переведена с ‘struct _reent‘ на механизм TLS (thread-local storage). Для сборки задействован инструментарий Meson.
В новом выпуске:
- Добавлена поддержка архитектур LoongArch, OpenRISC и LatticMico32.
- Предложена реализация заголовочного файла uchar.h, появившегося в стандарте C11.
- Добавлена настройка nano-malloc-clear-freed для очистки памяти, высвобожденной после выполнения free() или realloc().
- Реализована возможность использования clang multilib на на системах ARM64.
- Осуществлён переход на новый инструментарий picolibc-ci-tools для автоматической сборки в системах непрерывной интеграции.
- Для архитектуры MIPS реализована поддержка технологии “semihosting“, позволяющей коду, выполняемому в окружении отладчика или эмулятора, использовать механизмы ввода/вывода хост-системы.
- Для процессоров Xtensa добавлена поддержка picocrt и semihost.
- Добавлены настройки для использования с CoreBoot.
- Добавлена функция memset_explicit(), появившаяся в стандарте C23.
- Таблицы преобразования регистра символов обновлены до спецификации Unicode 15.1.0.
- Из библиотеки newlib перенесены функции asnprintf() и vasnprintf().
- Добавлена поддержка эмулятора FVP (Fixed Virtual Platforms), развиваемого ARM.
- Добавлена поддержка старых версии компилятора GCC (старее 4.4).
- Реализации iconv и locale заменены на более компактные варианты, в которых задействован общий код для работы с кодировками.