Supported Platforms
WitEngine is designed as a cross-platform framework, enabling heterogeneous computing clusters where different devices contribute according to their capabilities. This section details currently supported platforms, architectures, and the roadmap for future expansion.
Current Platform Support
WitEngine currently runs on four major platforms across two CPU architectures:
| Platform | x64 | ARM64 | Host | Node | Status |
|---|---|---|---|---|---|
| Windows | ✅ | ✅ | ✅ | ✅ | Full support |
| Linux | ✅ | ✅ | ✅ | ✅ | Full support |
| macOS | ✅ | ✅ (Apple Silicon) | ✅ | ✅ | Full support |
| Android | ✅ | ✅ | ❌ | ✅ | Node only |
Legend:
- Host — Can run the full WitEngine orchestrator (script parsing, job management)
- Node — Can run WitEngineNode (execute activities, report results)
Platform Details
Windows
Windows is the primary development platform for WitEngine.
| Aspect | Details |
|---|---|
| Versions | Windows 10, Windows 11, Windows Server 2016+ |
| Architectures | x64, ARM64 |
| Runtime | .NET 8.0+ |
| GPU Support | CUDA, DirectX 12, Vulkan, OpenCL |
| Special Features | Full Visual Studio integration, native debugging |
Typical Use Cases:
- Development workstations
- Render farm nodes with NVIDIA GPUs
- Enterprise server deployments
Linux
Linux provides excellent server-side support and is common in cluster deployments.
| Aspect | Details |
|---|---|
| Distributions | Ubuntu 20.04+, Debian 11+, RHEL 8+, Alpine 3.16+ |
| Architectures | x64, ARM64 |
| Runtime | .NET 8.0+ |
| GPU Support | CUDA, Vulkan, OpenCL |
| Special Features | Container-friendly (Docker, Kubernetes), headless operation |
Typical Use Cases:
- Cloud compute instances (AWS, Azure, GCP)
- On-premises server clusters
- Docker/Kubernetes deployments
- Raspberry Pi and ARM single-board computers
macOS
macOS supports both Intel and Apple Silicon Macs.
| Aspect | Details |
|---|---|
| Versions | macOS 12 (Monterey)+ |
| Architectures | x64 (Intel), ARM64 (M1, M2, M3, M4) |
| Runtime | .NET 8.0+ |
| GPU Support | Metal |
| Special Features | Unified memory architecture on Apple Silicon |
Typical Use Cases:
- Developer workstations
- Creative professional nodes (video, audio, graphics)
- Mixed office environments
Android
Android enables mobile devices to participate as compute nodes.
| Aspect | Details |
|---|---|
| Versions | Android 8.0 (API 26)+ |
| Architectures | ARM64, x86_64 (emulator) |
| Runtime | .NET MAUI / Xamarin |
| GPU Support | Vulkan, OpenGL ES |
| Limitations | Node only (no Host capability), background execution limits |
Typical Use Cases:
- Edge computing for IoT scenarios
- Utilizing idle mobile device capacity
- Field data collection and preprocessing
- Distributed sensing applications
⚠️ Android Considerations: Mobile devices have battery and thermal constraints. WitEngine respects Android's background execution policies and should be configured to run during charging or with explicit user consent for background work.
Architecture Support
x64 (AMD64)
The most common architecture for servers and desktops.
| Characteristic | Value |
|---|---|
| Word Size | 64-bit |
| Endianness | Little-endian |
| Typical Devices | Desktop PCs, servers, laptops |
| Performance | Highest single-thread performance |
ARM64 (AArch64)
Growing in popularity for power-efficient computing.
| Characteristic | Value |
|---|---|
| Word Size | 64-bit |
| Endianness | Little-endian (typically) |
| Typical Devices | Apple Silicon Macs, Raspberry Pi 4/5, Android phones, AWS Graviton |
| Performance | Excellent performance-per-watt |
Cross-Architecture Clusters
WitEngine fully supports mixed-architecture clusters:
The key requirement: all nodes must have compatible plugins. If a plugin is compiled only for x64, ARM64 nodes cannot execute those activities.
GPU Support
GPU capabilities vary by platform:
| Platform | CUDA | OpenCL | Vulkan | Metal | DirectX 12 |
|---|---|---|---|---|---|
| Windows | ✅ | ✅ | ✅ | ❌ | ✅ |
| Linux | ✅ | ✅ | ✅ | ❌ | ❌ |
| macOS | ❌ | ❌ | ✅* | ✅ | ❌ |
| Android | ❌ | ✅ | ✅ | ❌ | ❌ |
*macOS Vulkan via MoltenVK translation layer
GPU Requirements in Activities
Activities can declare GPU requirements:
// CUDA-specific activity (Windows/Linux only)
[RequiresGpu(Features = GpuFeatures.Cuda)]
public class CudaMatrixMultiply : WitActivityTransform { }
// Metal-specific activity (macOS only)
[RequiresGpu(Features = GpuFeatures.Metal)]
public class MetalImageProcess : WitActivityTransform { }
// Cross-platform GPU activity
[RequiresGpu(GpuType = GpuType.Discrete)]
public class GpuAcceleratedTask : WitActivityTransform { }The orchestrator automatically routes work to nodes with matching GPU capabilities.
Platform-Specific Considerations
Plugin Compatibility
Plugins must be compiled for each target platform. A typical plugin distribution:
MyPlugin/
├── win-x64/
│ └── MyPlugin.dll
├── win-arm64/
│ └── MyPlugin.dll
├── linux-x64/
│ └── MyPlugin.dll
├── linux-arm64/
│ └── MyPlugin.dll
├── osx-x64/
│ └── MyPlugin.dll
├── osx-arm64/
│ └── MyPlugin.dll
└── android-arm64/
└── MyPlugin.dllPure .NET plugins (no native dependencies) can often be architecture-neutral. Plugins with native dependencies require per-platform builds.
Native Dependencies
Some activities require native libraries:
| Dependency | Windows | Linux | macOS | Android |
|---|---|---|---|---|
| FFmpeg | ✅ | ✅ | ✅ | ✅ |
| CUDA Toolkit | ✅ | ✅ | ❌ | ❌ |
| Metal SDK | ❌ | ❌ | ✅ | ❌ |
| OpenCV | ✅ | ✅ | ✅ | ✅ |
Activities with native dependencies should:
- Declare platform requirements via
[RequiresOs] - Handle missing dependencies gracefully
- Document installation requirements
Network and Firewall
All platforms require network access for distributed operation:
| Requirement | Default | Notes |
|---|---|---|
| TCP Ports | Configurable | Host listens, nodes connect outbound |
| Firewall | Allow outbound | Nodes typically only need outbound access |
| NAT Traversal | Not required | Nodes initiate connections to host |
Future Platform Roadmap
WitEngine's architecture is designed for expansion. The following platforms are planned or under consideration:
Priority Platforms (Near-term)
| Platform | Target | Use Case | Priority | Notes |
|---|---|---|---|---|
| iOS | Node | Mobile edge computing, Apple ecosystem integration | High | Complements existing macOS/Android support |
| Xbox | Node | Powerful GPU compute, living room clusters | High | Excellent hardware, developer-friendly |
| PlayStation | Node | High-performance GPU nodes | Medium | Very capable hardware, SDK considerations |
| Android Smart Devices | Node | Smart TVs, set-top boxes, automotive | High | Extends existing Android support |
Why Game Consoles?
Modern game consoles are essentially high-performance computing devices that sit idle most of the time:
| Console | CPU | GPU | RAM | Potential |
|---|---|---|---|---|
| Xbox Series X | 8-core Zen 2 @ 3.8GHz | 12 TFLOPS RDNA 2 | 16 GB | Excellent compute node |
| PlayStation 5 | 8-core Zen 2 @ 3.5GHz | 10.3 TFLOPS RDNA 2 | 16 GB | Excellent compute node |
These devices could contribute significant compute power during idle hours — imagine a render farm that includes living room consoles contributing overnight.
Android Smart Devices extend the existing Android support to:
- Smart TVs (Samsung, LG, Sony with Android TV)
- Set-top boxes (NVIDIA Shield, Chromecast)
- Automotive systems (Android Automotive)
- Smart displays
Long-term Vision
| Platform | Target | Use Case | Status |
|---|---|---|---|
| IoT Devices | Node | Edge processing, sensors | Exploring |
| WebAssembly | Node | Browser-based nodes | Research |
| Tizen | Node | Samsung ecosystem | Evaluating |
| tvOS | Node | Apple TV nodes | After iOS |
| Embedded Linux | Node | Industrial automation | Evaluating |
Vision: Universal Compute Mesh
The long-term vision is a world where any device with a processor can contribute to distributed computation:
Checking Platform Capabilities
From Scripts
Scripts can query node capabilities:
~ Get available nodes ~
NodeCollection:nodes = Grid.GetNodes();
~ Filter by platform ~
NodeCollection:windowsNodes = Collection.Where(nodes,
n => Node.GetPlatform(n) == "Windows");
NodeCollection:cudaNodes = Collection.Where(nodes,
n => Node.HasGpuFeature(n, "Cuda"));From Code
The capability system provides detailed information:
public interface IWitCapabilities
{
IWitCapabilitiesOs Os { get; } // Platform, version
IWitCapabilitiesCpu Cpu { get; } // Architecture, cores
IWitCapabilitiesMemory Memory { get; } // RAM
IWitCapabilitiesStorage TempStorage { get; } // Disk
IReadOnlyList<IWitCapabilitiesGpu> Gpus { get; } // GPUs
IReadOnlyDictionary<string, string> CustomProperties { get; }
}Summary
| Aspect | Current State |
|---|---|
| Desktop OS | Windows, Linux, macOS — full support |
| Mobile OS | Android — node support |
| Architectures | x64, ARM64 — both fully supported |
| GPU APIs | CUDA, OpenCL, Vulkan, Metal, DirectX 12 |
| Mixed Clusters | Fully supported with compatible plugins |
| Priority Expansion | iOS, Xbox, PlayStation, Android Smart Devices |
| Long-term | IoT, WebAssembly, embedded systems |
WitEngine's cross-platform design means you can start with whatever hardware you have and expand as needed. A cluster can grow from a single developer laptop to a global mesh of heterogeneous devices — all running the same scripts, with work automatically distributed based on capabilities.