We are a well funded and rapidly growing startup in the hardware and software design space, working to solve the bottlenecks in the next generation of datacenter infrastructure and founded by a team of experienced innovators…
We are seeking a highly collaborative Software Engineer to help us create and grow our Rust based software stack, running on an ARMv8 based embedded system while trying to meet strict scalability, reliability, and security requirements.
In this high impact role you will work with hardware engineers, firmware engineers, Linux kernel developers, and other domain experts to design and implement a distributed system for managing a unique set of hardware resources at the core of our product.
Location preference for this position is in San Francisco Bay Area, but we are open to remote candidates.
The ideal candidate:
- Is passionate about code quality, including documentation, testing, and performance.
- Is a strong coder, can easily and independently figure out how to solve complex problems quickly by using Rust.
- Is comfortable designing and implementing at the user-space / kernel-space boundary.
- Is comfortable operating at the hardware / software boundary.
- Has some experience with PCIe device drivers.
- Has relevant experience working on distributed systems or control planes.
- Is experienced with systems programming in a Linux environment, including a working knowledge of libc, the system call interface, memory maps, and virtual and physical addressing.
- Has some Linux kernel development experience, such as modifying an existing kernel module, looking at the source code to understand a behavior, or creating a custom device driver.
- Has experience writing significant programs in Rust, or have some equivalent experience in C++/C, and is excited about working in Rust.
- Has some experience using git with a large code base.
- Is comfortable using various programming languages and build systems, including Rust, C, C++, Makefiles, Shell scripts, Python, Bazel.
- Has relevant experience developing software for embedded systems, preferably ARMv8, including: modifying existing C code for U-Boot and the Linux kernel; writing custom device drivers; generating software images; creating robust software update procedures; bringing up new hardware in the lab; reading board schematics and Verilog/SystemVerilog code