Do you love building systems from the ground up â tinkering with operating systems, drivers, and protocols, and making hardware and software really talk to each other? At Subnero, we design and build the technology that enables communication underwater â one of the most challenging networking environments youâll ever encounter.
At the heart of this is UnetStack, our open software framework for underwater networking. As a systems software engineer, youâll make sure UnetStack runs efficiently on embedded Linux platforms, integrates cleanly with diverse hardware, and performs reliably in the field.
Weâre looking for someone whoâs excited about embedded Linux, drivers, networking protocols, and programming in C, Python, Rust, and Java â and who wants to join a small, deeply technical team building real-world systems that bridge hardware, operating systems, and communications.
Fresh graduates are welcome: if youâve explored Linux on a Raspberry Pi, tinkered with embedded systems, weâd love to hear from you.
As a systems software engineer at Subnero, you will:
Customize and optimize embedded Linux distributions to support UnetStack and related software.
Configure and debug Linux at the system level (bootloaders, device trees, systemd services, networking).
Enhance and support UnetStack (Java-based) protocol agents on embedded platforms.
Write and maintain C and Rust code for low-level system components that UnetStack depends on.
Use Python for testing, automation, and deployment scripting.
Integrate a variety of communication hardware â sensors, modems â into UnetStack.
Improve and maintain build systems (Makefiles, cross-compilation toolchains) and automation scripts (Github Actions).
Profile and optimize system performance so that UnetStack can operate efficiently in resource-constrained environments.
Validate functionality and performance in the field with real hardware.
Collaborate closely with hardware engineers, application developers, and researchers to shape the system end-to-end.
You will thrive in this role if you:
Are comfortable digging into operating system internals (Linux configuration, cross-compilation, systemd service management).
Enjoy writing code in C and Rust for system-level programming, and Python for testing and automation.
Are comfortable working with networking concepts, like subnetting, routing, DHCP, and DNS.
Appreciate the craft of hardware/software integration and enjoy debugging tricky low-level problems.
Believe in documenting your work â for colleagues today and your future self tomorrow.
Value clear communication, curiosity, and persistence as much as technical skill.
Enjoy working in field settings, testing systems in real-world conditions.
Before applying, you might want to:
Explore UnetStack (https://unetstack.net/) to see the systems youâll be supporting.
Try the Unet simulator (https://subnero.com/products/unetsim.html) and VirtualAcousticOcean (https://github.com/org-arl/VirtualAcousticOcean.jl) to understand underwater networking challenges.
Experiment with Raspberry Pi or similar boards: set up Linux, configure device trees, and run a program as a systemd service.
Practice coding in C, Python, and Rust, and get comfortable navigating a Java-based application ecosystem.
Read about embedded Linux workflows like Yocto, Buildroot, and cross-compilation.
Think about how youâd optimize a system running on limited resources in unpredictable environments.
This role could be a great fit if you are:
A seasoned engineer with experience in embedded Linux, drivers, systemd services, and low-level programming.
A recent graduate who has tinkered with Linux internals, Raspberry Pi projects, or embedded systems â and has coded in C, Python, Rust, or Java.
Someone who likes working close to the metal and doesnât mind rolling up their sleeves to debug gnarly system issues â especially when the end result is making UnetStack run better.