Table of Contents
This repository contains Mono.Posix
sources imported from the
Mono repository in order to continue
active maintenance and development of the assembly and its support
library outside Mono proper. The goal is to make the assembly
available as a universal nuget that works across a number of Unix and
Unix-like systems.
This repository should be treated as the "canonical" source of
Mono.Posix
- all new code, bug fixes etc should be implemented here.
Mono copy of the code will not receive any new updates or fixes.
While the native and managed code in this repository should work fine across the entire spectrum of Unix and Unix-like systems, the only supported operating systems are the following:
x86-64
x86-64
, arm64
armv7
, armv7s
, arm64
, simulator x86-64
, simulator arm64
arm64
, simulator x86-64
x86-64
, arm64
Builds for Linux and macOS produce static and dynamic libraries, all the other builds produce only static libraries. Dynamic libraries do not have any additional dependencies except for the C library.
The *BSD
family of Unix operating system is not officially supported
because we have no infrastructure to automatically run and test
Mono.Posix
on these systems. However, we will gladly accept any PRs
which fix issues with these systems, implement new functionality
specific to these systems etc.
Mono.Posix
and Mono.Unix
support
net6.0
netcoreapp3.1
netstandard2.1
netstandard2.0
net45
Mono.Unix.Tests
supports
net6.0
netcoreapp3.1
dotnet
(6.*)cmake
(3.18 at the minimum, 3.19.5 if building for macCatalyst
on macOS)ninja
(any version supported by cmake
)gcc
or clang
compilersRepository contains Mono.Posix
and its native sources helper sources imported from
the https://github.com/mono/mono/ repository, commit 0bc0f6bef0c05d3367c82d2e414e9db256ae1541
The src/Mono.Posix
directory here corresponds to mcs/class/Mono.Posix/
in the Mono repository.
The src/native
directory here corresponds to support/
in the Mono repository
All the native code was migrated to C++ (using C++17 standard) and all functions not used by the managed code were removed. As the result of this migration, the native code uses stronger typing and stricter compile-time error checking.
Mono.Posix.dll
is now obsolete, with all the code that used to be in
it moved to the new Mono.Unix.dll
assembly. Mono.Posix.dll
contains only type forwarders for the moved types and a handful of
classes which were previously marked obsolete - they will now produce
build errors instead of warnings, if used by the application
referencing the new Mono.Posix
.
g_error
)void*
wherever possibleiOS
,
watchOS
, tvOS
, WASM
)uint32_t
) instead of the glib
ones<limits>
instead of the glib macroscreate-native-map
, possibly based on
cppsharp
or
clangsharp
although using them could pose problems when generating
managed versions of structures (they are heavily annotated in
managed code, sometimes augmented with code and sometimes they
become classes). Also, managed enumerations are often
composed of members which are non-enum macros in the native
code. It might be easier to write a simpler version of
create-native-map
which caters exactly to the needs of
Mono.Posix
without having to think about compatibility with
3rd party code.Mono.Posix.dll
against
libMonoPosixHelper.so
to make sure that all p/invokes are
there.free(3)
allocated objects automaticallyerrno
to ENOSYS