Hi everyone,
As robotics continues to gain traction due to AI, many developers are entering the space only to discover a barren landscape when it comes to developer productivity tools and infrastructure software. One recurring issue I've noticed is that nearly all robotics companies prototype in Python, only to later rewrite everything in C++ for production to meet performance requirements. Coming from a mobile development background, this approach seems incredibly inefficient.
The ecosystem fragmentation further exacerbates the problem. Tutorials, libraries, and APIs are scattered across languages like Rust, Python, and C99, making it difficult for developers to find cohesive resources or build a robust ecosystem.
From my perspective, the challenges of developing for robotics and other edge-compute applications are strikingly similar to those of mobile development. Issues like tooling, deployment, debugging, and language interoperability are universal.
This brings me to Swift. Its flexibility, strong C/C++ interoperability, and suitability for everything from embedded systems to UI applications make it a compelling choice for building a modern edge-compute stack. I really enjoyed the fact that Apple was rather strict with promoting Swift because it made a cohesive community around the language. Today's Edge landscape is wrought with developers bringing in a different platform and coding in all sorts of different languages adding to an incredible amount of confusion.
I’m planning to create an open-source Apache 2.0 Edge Platform entirely in Swift. The goal is to provide a seamless developer experience where you can:
- Plug in devices like Raspberry Pi or Nvidia Jetson via USB.
- Automatically recognize them as remote targets using SSH.
- Use an IDE (e.g., Xcode or VSCode) to press CMD+R and deploy/debug applications effortlessly, akin to building iOS apps.
I also intend to introduce cross-platform APIs for:
- Networking, such as service discovery and distributed actors (inspired by the node-based architecture of frameworks like ROS2).
- Data encoding, using formats like CBOR for efficient serialization.
- Disruption Tolerant Networking (DTN), inspired by DTN7, as a high-level library similar to Apple’s Multi-Peer Connectivity framework, enabling robust communication even in networks with intermittent connectivity.
However, I’ve run into a key concern:
Unlike iOS or macOS development, Swift Package Manager doesn’t provide the same seamless experience for wrapping C-headed libraries using .binaryTargets
. For example, if a developer wants to deploy SDL2 to a Linux device, they technically can, but the program won’t run because Swift on Linux requires manual steps like running apt-get install libsdl2-dev
.
This creates a subpar experience for developers, especially when targeting platforms like Linux. Does anyone have ideas on how to address this, even if it involves building an extension to Swift Package Manager? For instance, could we create a solution that focuses on Debian-based systems to simplify library installation and integration?
Before diving in, I’d also love to get feedback on:
- Do you see Swift as a viable candidate for an edge-compute platform at this scale?
- What challenges or limitations should I anticipate, particularly in targeting diverse edge-compute devices?
- Are there existing tools, libraries, or projects I should be aware of to complement this vision?
I’d greatly appreciate your insights!
P.S.
I've already considered Rust. I started a large startup that was written completely in Rust, and while it was a beautiful language and very well designed, it was incredibly difficult to work.
Zig is a great choice, but it's not 1.0 and stable yet
Go's interop story was too difficult to consider.