Blame SUPPORTED_PLATFORMS.md

Packit b5b901
# Supported platforms
Packit b5b901
Packit b5b901
|  System | Support type | Supported versions | Notes |
Packit b5b901
|---|---|---|---|
Packit b5b901
| GNU/Linux | Tier 1 | Linux >= 2.6.32 with glibc >= 2.12 | |
Packit b5b901
| macOS | Tier 1 | macOS >= 10.7 | |
Packit b5b901
| Windows | Tier 1 | >= Windows 7 | MSVC 2008 and later are supported |
Packit Service e08953
| FreeBSD | Tier 1 | >= 10 | |
Packit b5b901
| AIX | Tier 2 | >= 6 | Maintainers: @libuv/aix |
Packit b5b901
| z/OS | Tier 2 | >= V2R2 | Maintainers: @libuv/zos |
Packit b5b901
| Linux with musl | Tier 2 | musl >= 1.0 | |
Packit b5b901
| SmartOS | Tier 2 | >= 14.4 | Maintainers: @libuv/smartos |
Packit b5b901
| Android | Tier 3 | NDK >= r15b | |
Packit b5b901
| IBM i | Tier 3 | >= IBM i 7.2 | Maintainers: @libuv/ibmi |
Packit b5b901
| MinGW | Tier 3 | MinGW32 and MinGW-w64 | |
Packit b5b901
| SunOS | Tier 3 | Solaris 121 and later | |
Packit b5b901
| Other | Tier 3 | N/A | |
Packit b5b901
Packit b5b901
## Support types
Packit b5b901
Packit b5b901
* **Tier 1**: Officially supported and tested with CI. Any contributed patch
Packit b5b901
  MUST NOT break such systems. These are supported by @libuv/collaborators.
Packit b5b901
Packit b5b901
* **Tier 2**: Officially supported, but not necessarily tested with CI. These
Packit b5b901
  systems are maintained to the best of @libuv/collaborators ability,
Packit b5b901
  without being a top priority.
Packit b5b901
Packit b5b901
* **Tier 3**: Community maintained. These systems may inadvertently break and the
Packit b5b901
  community and interested parties are expected to help with the maintenance.
Packit b5b901
Packit b5b901
## Adding support for a new platform
Packit b5b901
Packit b5b901
**IMPORTANT**: Before attempting to add support for a new platform please open
Packit b5b901
an issue about it for discussion.
Packit b5b901
Packit b5b901
### Unix
Packit b5b901
Packit b5b901
I/O handling is abstracted by an internal `uv__io_t` handle. The new platform
Packit b5b901
will need to implement some of the functions, the prototypes are in
Packit b5b901
``src/unix/internal.h``.
Packit b5b901
Packit b5b901
If the new platform requires extra fields for any handle structure, create a
Packit b5b901
new include file in ``include/`` with the name ``uv-theplatform.h`` and add
Packit b5b901
the appropriate defines there.
Packit b5b901
Packit b5b901
All functionality related to the new platform must be implemented in its own
Packit b5b901
file inside ``src/unix/`` unless it's already done in a common file, in which
Packit b5b901
case adding an `ifdef` is fine.
Packit b5b901
Packit Service e08953
Two build systems are supported: autotools and cmake. Ideally both need to be
Packit Service e08953
supported, but if one of the two does not support the new platform it can be
Packit Service e08953
left out.
Packit b5b901
Packit b5b901
### Windows
Packit b5b901
Packit b5b901
Windows is treated as a single platform, so adding support for a new platform
Packit b5b901
would mean adding support for a new version.
Packit b5b901
Packit b5b901
Compilation and runtime must succeed for the minimum supported version. If a
Packit b5b901
new API is to be used, it must be done optionally, only in supported versions.
Packit b5b901
Packit b5b901
### Common
Packit b5b901
Packit b5b901
Some common notes when adding support for new platforms:
Packit b5b901
Packit b5b901
* Generally libuv tries to avoid compile time checks. Do not add any to the
Packit b5b901
  autotools based build system or use version checking macros.
Packit b5b901
  Dynamically load functions and symbols if they are not supported by the
Packit b5b901
  minimum supported version.