We are seeking a highly collaborative Software Engineer to help us create and grow our Rust based software stack, running on an ARM 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.
SKILLS/QUALIFICATIONS
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 experience with TCP/IP, RDMA and network control plane development Is familiar with open flow, stateful firewalls, packet forwarding and knows what a TCAM and LPM tables are good for. 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.