tizen: kdbus: revamp thread deinitialization
[platform/upstream/glib.git] / docs / supported-platforms.md
1 Supported platforms
2 ===
3
4 GLib’s approach to portability is that we only support systems that we can test.
5 That means that either a large number of GLib developers are regularly using
6 GLib on a particular system, or we have regular builds of GLib on that system.
7
8 Minimum versions
9 ---
10
11 This list is authoritative, and documents what this version of GLib targets to
12 support. The list will be periodically updated for the development branch,
13 with versions typically being updated as they lapse from receiving support from
14 their vendor.
15
16  * macOS: minimum version OS X 10.7 (we
17    [don’t support universal binaries](https://bugzilla.gnome.org/show_bug.cgi?id=780238);
18    some features (like notification support)
19    [require OS X 10.9](https://bugzilla.gnome.org/show_bug.cgi?id=747146)
20    * Note that older versions of macOS than what’s currently officially
21      supported by Apple are supported by GLib on a best-effort basis due to
22      still having significant user bases
23  * Windows:
24    [minimum version is Windows 8](https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1970),
25    minimum build chain is Visual Studio 2012
26  * Android: [minimum NDK version 15](https://gitlab.gnome.org/GNOME/glib/issues/1113)
27  * Linux: glibc newer than 2.5 (if using glibc; other forms of libc are supported)
28
29 Tested platforms
30 ---
31
32 GLib is regularly built on at least the following systems:
33
34  * GNOME OS Nightly: https://os.gnome.org/
35  * Fedora: http://koji.fedoraproject.org/koji/packageinfo?packageID=382
36  * Ubuntu: http://packages.ubuntu.com/source/glib2.0
37  * Debian: https://packages.debian.org/experimental/libglib2.0-0
38  * FreeBSD: https://wiki.gnome.org/Projects/Jhbuild/FreeBSD
39  * openSUSE: https://build.opensuse.org/package/show/GNOME:Factory/glib2
40  * CI runners, https://gitlab.gnome.org/GNOME/glib/blob/main/.gitlab-ci.yml:
41    - Fedora (34, https://gitlab.gnome.org/GNOME/glib/-/blob/main/.gitlab-ci/fedora.Dockerfile)
42    - Debian (Bullseye, https://gitlab.gnome.org/GNOME/glib/-/blob/main/.gitlab-ci/debian-stable.Dockerfile)
43    - Windows (MinGW64)
44    - Windows (msys2-mingw32)
45    - Windows (Visual Studio 2017, and a static linking version)
46    - Android (NDK r23b, API 31, arm64, https://gitlab.gnome.org/GNOME/glib/-/blob/main/.gitlab-ci/android-ndk.sh)
47    - FreeBSD (12 and 13)
48    - macOS
49
50 If other platforms are to be supported, we need to set up regular CI testing for
51 them. Please contact us if you want to help.
52
53 Policy and rationale
54 ---
55
56 Due to their position in the market, we consider supporting GNU/Linux, Windows
57 and macOS to be the highest priorities and we will go out of our way to
58 accommodate these systems, even in places that they are contravening standards.
59
60 In general, we are open to the idea of supporting any Free Software UNIX-like
61 system with good POSIX compliance.  We are always interested in receiving
62 patches that improve our POSIX compliance — if there is a good POSIX equivalent
63 for a platform-specific API that we’re using, then all other things equal, we
64 prefer the POSIX one.
65
66 We may use a non-POSIX API available on one or more of our supported systems in
67 the case that it provides some advantage over the POSIX equivalent (such as the
68 case with `pipe2()` solving the `O_CLOEXEC` race).  In these cases, we will try
69 to provide a fallback to the pure POSIX approach.  If we’ve used a
70 system-specific API without providing a fallback to a largely-equivalent POSIX
71 API then it is likely a mistake, and we’re happy to receive a patch to fix it.
72
73 We are not interested in supporting other systems if it involves adding code
74 paths that we cannot test.  Specifically, this means that we will reject patches
75 that introduce platform-specific `#ifdef` sections in the code unless we are
76 actively doing builds of GLib on this platform (ie: see the lists above).  We’ve
77 historically accepted such patches from users of these systems on an ad hoc
78 basis, but it created an unsustainable situation.  Patches that fix
79 platform-specific build issues in such a way that the code is improved in the
80 general case are of course welcome.
81
82 Although we aim to support all systems with good POSIX compliance, we are not
83 interested in adhering to “pure POSIX and nothing else”.  If we need to add a
84 feature and we can provide good support on all of the platforms that we support
85 (above), we will not hold back for other systems.  We will always try to provide
86 a fallback to a POSIX-specified approach, if possible, or to simply replace a
87 given functionality with a no-op, but even this may not be possible in cases of
88 critical functionality.
89
90 Specific notes
91 ---
92
93 Note that we currently depend on a number of features specified in POSIX, but
94 listed as optional:
95
96  * [`CLOCK_MONOTONIC`](http://pubs.opengroup.org/onlinepubs/009695399/functions/clock_gettime.html)
97    is expected to be present and working
98  * [`pthread_condattr_setclock()`](http://pubs.opengroup.org/onlinepubs/7999959899/functions/pthread_condattr_setclock.html)
99    is expected to be present and working
100
101 Also see [toolchain requirements](./toolchain-requirements.md).