1# Supported platforms 2 3| System | Support type | Supported versions | Notes | 4|---|---|---|---| 5| GNU/Linux | Tier 1 | Linux >= 2.6.32 with glibc >= 2.12 | | 6| macOS | Tier 1 | macOS >= 10.15 | Current and previous macOS release | 7| Windows | Tier 1 | >= Windows 8 | VS 2015 and later are supported | 8| FreeBSD | Tier 1 | >= 10 | | 9| AIX | Tier 2 | >= 6 | Maintainers: @libuv/aix | 10| IBM i | Tier 2 | >= IBM i 7.2 | Maintainers: @libuv/ibmi | 11| z/OS | Tier 2 | >= V2R2 | Maintainers: @libuv/zos | 12| Linux with musl | Tier 2 | musl >= 1.0 | | 13| SmartOS | Tier 3 | >= 14.4 | | 14| Android | Tier 3 | NDK >= r15b | Android 7.0, `-DANDROID_PLATFORM=android-24` | 15| MinGW | Tier 3 | MinGW32 and MinGW-w64 | | 16| SunOS | Tier 3 | Solaris 121 and later | | 17| Other | Tier 3 | N/A | | 18 19## Support types 20 21* **Tier 1**: Officially supported and tested with CI. Any contributed patch 22 MUST NOT break such systems. These are supported by @libuv/collaborators. 23 24* **Tier 2**: Officially supported, but not necessarily tested with CI. These 25 systems are maintained to the best of @libuv/collaborators ability, 26 without being a top priority. 27 28* **Tier 3**: Community maintained. These systems may inadvertently break and the 29 community and interested parties are expected to help with the maintenance. 30 31## Adding support for a new platform 32 33**IMPORTANT**: Before attempting to add support for a new platform please open 34an issue about it for discussion. 35 36### Unix 37 38I/O handling is abstracted by an internal `uv__io_t` handle. The new platform 39will need to implement some of the functions, the prototypes are in 40``src/unix/internal.h``. 41 42If the new platform requires extra fields for any handle structure, create a 43new include file in ``include/`` with the name ``uv-theplatform.h`` and add 44the appropriate defines there. 45 46All functionality related to the new platform must be implemented in its own 47file inside ``src/unix/`` unless it's already done in a common file, in which 48case adding an `ifdef` is fine. 49 50Two build systems are supported: autotools and cmake. Ideally both need to be 51supported, but if one of the two does not support the new platform it can be 52left out. 53 54### Windows 55 56Windows is treated as a single platform, so adding support for a new platform 57would mean adding support for a new version. 58 59Compilation and runtime must succeed for the minimum supported version. If a 60new API is to be used, it must be done optionally, only in supported versions. 61 62### Common 63 64Some common notes when adding support for new platforms: 65 66* Generally libuv tries to avoid compile time checks. Do not add any to the 67 autotools based build system or use version checking macros. 68 Dynamically load functions and symbols if they are not supported by the 69 minimum supported version. 70