| Supported platforms |
| === |
| |
| GLib’s approach to portability is that we only support systems that we can test. |
| That means that either a large number of GLib developers are regularly using |
| GLib on a particular system, or we have regular builds of GLib on that system. |
| |
| Minimum versions |
| --- |
| |
| This list is authoritative, and documents what this version of GLib targets to |
| support. The list will be periodically updated for the development branch, |
| with versions typically being updated as they lapse from receiving support from |
| their vendor. |
| |
| * macOS: minimum version OS X 10.7 (we |
| [don’t support universal binaries](https://bugzilla.gnome.org/show_bug.cgi?id=780238); |
| some features (like notification support) |
| [require OS X 10.9](https://bugzilla.gnome.org/show_bug.cgi?id=747146) |
| * Note that older versions of macOS than what’s currently officially |
| supported by Apple are supported by GLib on a best-effort basis due to |
| still having significant user bases |
| * Windows: |
| [minimum version is Windows 8](https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1970), |
| minimum build chain is Visual Studio 2012 |
| * Android: [minimum NDK version 15](https://gitlab.gnome.org/GNOME/glib/issues/1113) |
| * Linux: glibc newer than 2.5 (if using glibc; other forms of libc are supported) |
| |
| Tested platforms |
| --- |
| |
| GLib is regularly built on at least the following systems: |
| |
| * GNOME OS Nightly: https://os.gnome.org/ |
| * Fedora: http://koji.fedoraproject.org/koji/packageinfo?packageID=382 |
| * Ubuntu: http://packages.ubuntu.com/source/glib2.0 |
| * Debian: https://packages.debian.org/experimental/libglib2.0-0 |
| * FreeBSD: https://wiki.gnome.org/Projects/Jhbuild/FreeBSD |
| * openSUSE: https://build.opensuse.org/package/show/GNOME:Factory/glib2 |
| * CI runners, https://gitlab.gnome.org/GNOME/glib/blob/main/.gitlab-ci.yml: |
| - Fedora (34, https://gitlab.gnome.org/GNOME/glib/-/blob/main/.gitlab-ci/fedora.Dockerfile) |
| - Debian (Bullseye, https://gitlab.gnome.org/GNOME/glib/-/blob/main/.gitlab-ci/debian-stable.Dockerfile) |
| - Windows (MinGW64) |
| - Windows (msys2-mingw32) |
| - Windows (Visual Studio 2017, and a static linking version) |
| - Android (NDK r23b, API 31, arm64, https://gitlab.gnome.org/GNOME/glib/-/blob/main/.gitlab-ci/android-ndk.sh) |
| - FreeBSD (12 and 13) |
| - macOS |
| |
| If other platforms are to be supported, we need to set up regular CI testing for |
| them. Please contact us if you want to help. |
| |
| Policy and rationale |
| --- |
| |
| Due to their position in the market, we consider supporting GNU/Linux, Windows |
| and macOS to be the highest priorities and we will go out of our way to |
| accommodate these systems, even in places that they are contravening standards. |
| |
| In general, we are open to the idea of supporting any Free Software UNIX-like |
| system with good POSIX compliance. We are always interested in receiving |
| patches that improve our POSIX compliance — if there is a good POSIX equivalent |
| for a platform-specific API that we’re using, then all other things equal, we |
| prefer the POSIX one. |
| |
| We may use a non-POSIX API available on one or more of our supported systems in |
| the case that it provides some advantage over the POSIX equivalent (such as the |
| case with `pipe2()` solving the `O_CLOEXEC` race). In these cases, we will try |
| to provide a fallback to the pure POSIX approach. If we’ve used a |
| system-specific API without providing a fallback to a largely-equivalent POSIX |
| API then it is likely a mistake, and we’re happy to receive a patch to fix it. |
| |
| We are not interested in supporting other systems if it involves adding code |
| paths that we cannot test. Specifically, this means that we will reject patches |
| that introduce platform-specific `#ifdef` sections in the code unless we are |
| actively doing builds of GLib on this platform (ie: see the lists above). We’ve |
| historically accepted such patches from users of these systems on an ad hoc |
| basis, but it created an unsustainable situation. Patches that fix |
| platform-specific build issues in such a way that the code is improved in the |
| general case are of course welcome. |
| |
| Although we aim to support all systems with good POSIX compliance, we are not |
| interested in adhering to “pure POSIX and nothing else”. If we need to add a |
| feature and we can provide good support on all of the platforms that we support |
| (above), we will not hold back for other systems. We will always try to provide |
| a fallback to a POSIX-specified approach, if possible, or to simply replace a |
| given functionality with a no-op, but even this may not be possible in cases of |
| critical functionality. |
| |
| Specific notes |
| --- |
| |
| Note that we currently depend on a number of features specified in POSIX, but |
| listed as optional: |
| |
| * [`CLOCK_MONOTONIC`](http://pubs.opengroup.org/onlinepubs/009695399/functions/clock_gettime.html) |
| is expected to be present and working |
| * [`pthread_condattr_setclock()`](http://pubs.opengroup.org/onlinepubs/7999959899/functions/pthread_condattr_setclock.html) |
| is expected to be present and working |
| |
| Also see [toolchain requirements](./toolchain-requirements.md). |