POSIX® compatibility shims for Linux (and other environments)


README for Shimmy

Authors: A. Wilcox, maintainer, principal developer
Status: Beta
Copyright: © 2016-2019 Adélie Linux Team. NCSA open source licence.


This repository contains code and documentation for Shimmy, a small set of utilities designed to bring stricter POSIX® compliance to open-source operating environments. It is designed mainly for use on Adélie Linux, but it is also occasionally tested on Gentoo Linux, FreeBSD, OpenBSD, and Mac OS, among others.

Note that for ideal compliance, you need to perform any one of the following tasks:

  • Install these utilties to a path listed in your system's _CS_PATH (typically, this is only /bin and /usr/bin).
  • or ensure that the directory where Shimmy is installed comes first in PATH, and that getconf(1) PATH returns the directory as well, typically by patching it.


As the Adélie Linux project is an open-source Linux distribution, this package is distributed under the same NCSA open source license as the distribution.


Any changes to this repository must be reviewed before being pushed to the master branch. There are no exceptions to this rule. For security-sensitive updates, contact the Security Team at sec-bugs@adelielinux.org.

Included utilities

This section contains information about the utilities included with the Shimmy package.


The getconf(1) utility returns configuration information about the presently running operating environment using sysconf(3), confstr(3), and fpathconf(3).

With the exception of OpenBSD, almost all tested targets had at least one issue with strict POSIX® conformance.

  • FreeBSD returned "Invalid argument" on _POSIX_TRACE_LOG, instead of the expected result "undefined" or "-1".
  • glibc returned "Unrecognised variable" for V7_ENV when it has a defined value in glibc's confstr(3) implementation. It also considers _POSIX_MAX_INPUT and MAX_INPUT as the same variable, which is incorrect (the former being the total maximum implementation value, and the latter being the maximum value for a specified terminal file).
  • musl does not ship a getconf; however, Alpine Linux ships a getconf utility. It is heavily obsolescent (being based on 1997 NetBSD code). It does not recognise _XOPEN_* variables nor does it recognise _-prefixed POSIX2 variables.
  • NetBSD does not recognise _-prefixed POSIX2 variables.