2022-05-17 23:43:50 +02:00
|
|
|
|
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
|
|
|
|
|
---
|
|
|
|
|
|
2023-06-29 16:51:44 +02:00
|
|
|
|
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.
|
|
|
|
|
|
2022-05-17 23:53:37 +02:00
|
|
|
|
* 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)
|
2023-06-29 16:51:44 +02:00
|
|
|
|
* 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
|
2022-05-17 23:53:37 +02:00
|
|
|
|
* 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)
|
2022-05-17 23:43:50 +02:00
|
|
|
|
* 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
|
2022-05-17 23:53:52 +02:00
|
|
|
|
* CI runners, https://gitlab.gnome.org/GNOME/glib/blob/main/.gitlab-ci.yml:
|
2024-05-15 11:33:00 +02:00
|
|
|
|
- Fedora (39, https://gitlab.gnome.org/GNOME/glib/-/blob/main/.gitlab-ci/fedora.Dockerfile)
|
|
|
|
|
- Debian (Bookworm, https://gitlab.gnome.org/GNOME/glib/-/blob/main/.gitlab-ci/debian-stable.Dockerfile)
|
2024-10-07 16:09:03 +02:00
|
|
|
|
- Alpine Linux (3.19 using muslc, https://gitlab.gnome.org/GNOME/glib/-/blob/main/.gitlab-ci/alpine.Dockerfile)
|
2023-05-02 15:34:21 +02:00
|
|
|
|
- Windows (MinGW64)
|
2024-05-15 12:31:20 +02:00
|
|
|
|
- Windows (msys2-mingw32 and msys2-clang64; msys2 is a rolling release distribution)
|
2024-10-07 16:09:03 +02:00
|
|
|
|
- Windows (Visual Studio 2019 x64, a static linking version on x64, and an x86 version)
|
2023-05-02 15:34:21 +02:00
|
|
|
|
- Android (NDK r23b, API 31, arm64, https://gitlab.gnome.org/GNOME/glib/-/blob/main/.gitlab-ci/android-ndk.sh)
|
2024-10-07 16:09:03 +02:00
|
|
|
|
- FreeBSD (13)
|
|
|
|
|
- macOS (arm64, SDK 11.3)
|
2022-05-17 23:43:50 +02:00
|
|
|
|
|
|
|
|
|
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
|
2022-05-17 23:53:37 +02:00
|
|
|
|
and macOS to be the highest priorities and we will go out of our way to
|
2022-05-17 23:43:50 +02:00
|
|
|
|
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).
|