LinuxCore 0.4.1
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
dotnet add package LinuxCore --version 0.4.1
NuGet\Install-Package LinuxCore -Version 0.4.1
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="LinuxCore" Version="0.4.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="LinuxCore" Version="0.4.1" />
<PackageReference Include="LinuxCore" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add LinuxCore --version 0.4.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: LinuxCore, 0.4.1"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package LinuxCore@0.4.1
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=LinuxCore&version=0.4.1
#tool nuget:?package=LinuxCore&version=0.4.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
LinuxCore
A thin, AOT-compatible .NET wrapper around Linux libc APIs. Provides ergonomic, low-allocation C# abstractions over raw syscalls for files, sockets, events, polling, scheduling, and more.
Features
- File I/O —
LinuxFileforopen/read/write/seek/statxwithSpan<byte>support - Memory Files —
LinuxMemoryFileformemfd_createand memfd seals viafcntl - Memory Maps —
LinuxMemoryMap/LinuxReadOnlyMemoryMapformmap/munmapwithSpan<byte>/Memory<byte>access - Events & Semaphores —
LinuxEventandLinuxSemaphorebacked byeventfd - Polling —
LinuxPollforpoll()-based readiness notification - Clocks —
LinuxClockfor nanosecond-precision monotonic, boottime, CPU-time, and wall-clock (CLOCK_REALTIME) timestamps and high-precision sleeps - Scheduling —
LinuxSchedulerforsched_setscheduler/sched_getscheduler(FIFO, RR, etc.) - Resource Limits —
LinuxResourceLimitforgetrlimit/setrlimit - Cancellation —
LinuxCancellationTokenbridgesCancellationTokento native poll - Sockets —
UnixSocketfor AF_UNIX sockets andLinuxSocketBasefor shared raw socket operations - System Configuration —
SystemConfigurationforsysconf()queries (page size, max open files, etc.) - Users & Groups —
LinuxUserandLinuxGroupfor passwd/group lookups by name or ID
Requirements
- Linux (the library is annotated with
[SupportedOSPlatform("linux")]) - .NET 10+
- glibc 2.28+ (2.34+ on 32-bit architectures) or musl 1.2.5+ for
statxand time64 entry points
Architecture
The library has two layers:
LinuxCore.Interop— internal P/Invoke declarations using source-generated[LibraryImport]. Each file maps to a libc subsystem.LinuxCore— public API types wrapping the interop layer with safe-ish, idiomatic C# APIs.
File-descriptor-owning types follow this hierarchy:
NativeObject (IDisposable + Finalizer)
└─ FileObject (FileDescriptor, shared I/O and descriptor-control helpers)
├─ LinuxEventBase → LinuxEvent, LinuxSemaphore
├─ LinuxSocketBase → UnixSocket
└─ LinuxFile → LinuxMemoryFile
LinuxSecurityObject (Id + Name)
├─ LinuxUser
└─ LinuxGroup
Operational notes
LinuxScheduler.Set(...)and someLinuxResourceLimit.Set(...)calls may require root privileges or Linux capabilities such asCAP_SYS_NICE/CAP_SYS_RESOURCE.- AF_UNIX pathname sockets are subject to the kernel
sockaddr_un.sun_pathlimit (108 bytes on Linux). FileDescriptoris an allocation-free, non-owning value. Copying it or readingFileObject.Descriptordoes not duplicate the descriptor or retain its lifetime; useClone()for an independent descriptor.FileObjectintentionally avoids per-operation lifetime leasing, so callers must keep the owner strongly reachable and prevent concurrent disposal or external closure while operations or raw descriptors are in use. Closed or stale descriptor values may refer to unrelated resources after Linux recycles the number.- Generic
ReceiveMessagemethods return only the requested control-message type and do not close resources from nonmatching messages. On Unix sockets, useReceiveFileDescriptorswhen anSCM_RIGHTSmessage may be present. - On QEMU linux-user,
ReceiveFileDescriptorsrequiresSO_PASSPIDFDandSO_PASSSECto be disabled. Either option can cause host-side descriptors to be omitted during ancillary conversion and remain open. LinuxCore does not enable either option. LinuxFileFlagsandLinuxMemoryMapFlagsvalues are stable managed tokens. LinuxCore translates architecture-dependent file flags on Arm and PowerPC, and mapping flags on PowerPC, before calling libc.- CI runs the full test suite on every target. Alpine x64 and arm64 plus Arm32 glibc and musl build and test inside native SDK containers; ppc64le, s390x, RISC-V64, and LoongArch64 run host-built portable test output under QEMU. All targets gate publishing. The RISC-V64 and LoongArch64 matrix entries use community runtimes because Microsoft does not publish supported .NET 10 runtimes for those architectures or support QEMU execution.
- NativeAOT compatibility is exercised in CI on both glibc (Ubuntu) and musl (Alpine) runners via a small smoke app.
License
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net10.0
- No dependencies.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.4.10 | 71 | 8/19/2026 |
| 0.4.9 | 66 | 8/18/2026 |
| 0.4.8 | 80 | 8/18/2026 |
| 0.4.7 | 69 | 8/17/2026 |
| 0.4.6 | 77 | 8/14/2026 |
| 0.4.5 | 72 | 8/14/2026 |
| 0.4.4 | 73 | 8/13/2026 |
| 0.4.3 | 71 | 8/11/2026 |
| 0.4.2 | 66 | 8/5/2026 |
| 0.4.1 | 73 | 8/4/2026 |
| 0.4.0 | 70 | 8/4/2026 |
| 0.3.12 | 76 | 7/16/2026 |
| 0.3.11 | 74 | 7/15/2026 |
| 0.3.10 | 143 | 6/26/2026 |
| 0.3.9 | 84 | 6/26/2026 |
| 0.3.8 | 78 | 6/26/2026 |
| 0.3.7 | 96 | 6/26/2026 |
| 0.3.6 | 102 | 6/22/2026 |
| 0.3.5 | 100 | 6/11/2026 |
| 0.3.4 | 86 | 5/25/2026 |
Loading failed