About one year and a half after the release of the previous stable version, the release of uClibc 0.9.30 is a great event in the embedded Linux community. uClibc is a replacement for the glibc C library, implementing most of the features of glibc, while retaining a much smaller size and an incredible level of configurability.
The only changelog available is a list of Subversion commits that occurred between the 0.9.29 and the 0.9.30 releases, so it is quite difficult to extract what are the important bits. However, a news from August 2008 on uClibc.org website gives an idea of what happened in the 0.9.30 version :
- a lot of fixes for the various architectures, and other tweaks and improvements
- an improved configurability that allows to enable/disable a larger number of features, now including
- Realtime-related family of SUSv functions (option
UCLIBC_HAS_REALTIME
, which enablesaio_*()
functions,mq_*()
functions,mlock()
family of functions,sched_*()
functions,sem_*()
functions, a few signal-related functions and thetimer_*()
functions). Threading support requires the realtime functions, so it depends on this option. - Advanced realtime-related family of SUSv functions (option
UCLIBC_HAS_ADVANCED_REALTIME
, which enables a few advancedclock_*()
andmq_*()
functions, and a large number ofposix_spawnattr_*()
andposix_spawn_*()
functions) - epoll (option
UCLIBC_HAS_EPOLL
) - extended attributes (option
UCLIBC_HAS_XATTR
) - other options to enable/disable compatibility/deprecated APIs
- Realtime-related family of SUSv functions (option
- it is now possible to build uClibc without network support at all. The global option is
UCLIBC_HAS_NETWORK_SUPPORT
, and can be further refined withUCLIBC_HAS_SOCKET
to enable just the socket support (for example if only Unix sockets are used),UCLIBC_HAS_IPV4
to get IPv4 functionality, which of course requires the socket support, andUCLIBC_HAS_IPV6
for IPv6.
A quick look at the differences between the available options allows to see another set of features:
- Support for the AVR32 and Xtensa architecture has been added
- A configuration option to enable non-functional stubs for features that are not implemented on a given architecture. This option for example enables a stub fork() function on non-MMU architectures so that applications can easily be recompiled, without checking all the fork() sites from the beginning
- Options to enable/disable Linux-specific or BSD-specific functions
The allnoconfig setup with shared library is reported to have been reduced by 30%, though the allnoconfig setup doesn’t necessarily correspond to a classical usage of uClibc.
The tarball is available here.