Kernel

Kernel software engineering is often made out to be harder than it is — it’s really not all that different than working on any other large piece of software. The crashes might be a little more spectacular, but you don’t want anything mission critical to crash. Bringing down the primary application is as bad as bringing down the kernel.

Still, there are particular sets of problems and benefits around doing kernel work that we’re very familiar with. You need to deal with a much more mixed set of synchronization primitives and concerns than in a regular application, including both voluntary sleeps and involuntary preemption. It can be a little daunting, but when you’re used to it it becomes like second nature. You want to be very careful to always handle errors, not just bail out if something unexpected happens, manage resources rather than letting them grow unboundedly, and really take seriously any potential races or other performance and synchronization issues. After all, everything else is depending on you.

So we do that work. And we also work with clients who have their own code which needs to run closer to bare metal, either because it needs to manage low-level resources in order to ensure correct performance or because it needs access to specialized hardware that it doesn’t make sense to try to export through a whole Unix-like operating system. Maybe you even want to build your own Unix-like kernel for some reason — we can do that, too.

We’ve got some of the best FreeBSD kernel hackers working for us today, but if you need something done on Linux we can get it done, too. We’ve ported Unix-like kernels and developed new microkernels for MIPS CPUs, and our principals did most of the FreeBSD port to Cavium Octeon. We’re networking experts, too, and are particularly-good at developing networking services in the kernel. Of course, sometimes you want to get away from the difficulties of working in the kernel, but still need a few of the benefits of it. We can build a specialized exokernel for you so you can boot your application on another processor, or we can bring the best of the kernel to userland. We’ve got a lot of experience doing packet processing in userland and even bringing full TCP/IP stacks out of the kernel and into customer applications.

Kernel work can be intimidating, but we’ll help you sort out how to handle the low-level problems you’re facing, develop the operating system features your product needs, or even build your own operating system from scratch. Whether you want to do your kernel work in assembly on an embedded processor, or want someone to help you get the kernel out of your way entirely in a high-level language, we can help you out. Even if you want to run an innovative new programming language interpreter on bare metal, or design a niche hypervisor, contact us. We’ve been there.