Running Applications on the
NetBSD Rump Kernel
Justin Cormack @justincormack
Rump kernels
Slides at http://eurobsdcon.myriabit.eu/
3
What is a rump kernel?
It is the (NetBSD) kernel without support for
• executing binaries
• scheduling threads
• managing hardware privilege levels
• most memory management eg virtual memory
4
Just drivers
• Drivers are the bit of the kernel that turns raw hardware into nice
abstractions like files and sockets
• Get something else (host) to do the other parts (host environment)
• Or do without it, just compile in single purpose application.
5
What use is that?
• You get the missing capabilities from a hypercall layer.
• Like a very simple virtual machine
• man 3 rumpuser
• Provides memory allocation, threads, mutexes, console output, random
numbers, clock
• This can run in userspace for example, but can be implemented in any
environment fairy easily
6
What use is that?
• Original use cases around testing drivers.
• You can test a kernel driver without booting the OS.
• You can test much of the OS without booting into it.
• Debugging is easy as it is just a userpsace program
• Also for running kernel drivers in userspace eg for file systems
7
How was it used?
• Typically either written for rump like the NetBSD tests
rump_init(); rump_sys_mkdir(path, 0777);
• or using LD_PRELOAD to change some calls using rumphijack
library
• The interface was essentially the syscall interface (minus parts not
supported by rump)
8
New developments
Xen port
• In August last year we got a Xen port of the rump kernel working. In
addition to porting the hypercall layer, we also got NetBSD libc to
compile against the rump kernel.
• We replaced the syscalls in libc with calls to the rump kernel syscall
implementations.
• This enabled running real applications, in particular we had LuaJIT
running, and a simple web server.
• Not just syscalls, more of a POSIX API.
10
Increased portability
The POSIX implementation of the rump kernel now runs on
• NetBSD
• FreeBSD, OpenBSD, DragonflyBSD
• Solaris
• Linux, including Android
• on architectures including arm, x86, amd64, powerpc, sparc64 and mips
11
Increased testing
There is continuous integration using TravisCI and buildbot
• Tests all commits to the buildrump.sh script on multiple operating
systems and architectures
• Tests NetBSD -current hourly on multiple operating systems and
architectures
• Good test of NetBSD portability issues
• Uses ljsyscall to test functionality - good syscall coverage, fast.
12
Continuous integration
13
Running
applications
rumprun-posix
• Late last year I started work on rumprun, which allowed running
unmodified NetBSD binaries with the rump kernel.
• The main issue with this is that you have two libcs involved, so there are
symbol conflicts. However with judicious symbol renaming it turned out
to be possible to fix this.
• In particular you can compile userspace binaries for the core NetBSD
commands like ifconfig, etc.
• Can test userspace without booting into OS
15
How does it work?
• Compile NetBSD object code and libraries on host machine
• Link code and libraries to new object with -nostdinc
• Rename read symbols to rump___sysimpl_read ...
• Fix up main and other things which will be called from a stub
• Localise symbols to avoid conflicts
• Link with host libc and rump libraries
• See script for more details, it is messy...
16
# ./rumpdyn/bin/rump_allserver unix://sock
# export RUMP_SERVER=unix://sock
# ./bin/ifconfig
lo0: flags=8049 mtu 33648
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
inet 127.0.0.1 netmask 0xff000000
# ./bin/ping -o 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 64 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=0.000000 ms
----127.0.0.1 PING Statistics----
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.000000/0.000000/0.000000/0.000000 ms
17
Supported commands
arp cp dumpfs fsck_msdos ls mount_ext2fs ndp pax
reboot sysctl wpa_supplicant cat dd ed halt mkdir
mount_ffs newfs pcictl rm umount cgdconfig df fsck
ifconfig mknod mount_msdos newfs_ext2fs ping rmdir
vnconfig chmod disklabel fsck_ext2fs ktrace modstat
mount_tmpfs newfs_msdos ping6 rndctl wlanctl chown
dump fsck_ffs ln mount mv npfctl raidctl route
wpa_passphrase
18
What runs?
• Almost anything in the NetBSD core can probably be compiled
• There is now a cross compiler for rumprun, that should work with most
code
• There is experimental pthreads support, not yet well tested
• Programs that fork or use other things not supported by rump may be a
problem
• Some of the missing rump features are emulated or partially emulated,
eg anon mmap
19
rumprun - TODOs
• Clean up and upstream libc build modifications
• Fix other architectures, currently only working on x86, amd64
• Build more of userspace tools and libraries
• Use for NetBSD tests - ability to run tests on a kernel without booting it
very useful when developing.
• Improve build process
• Continuous integration and testing on NetBSD current.
20
More new
developments
rump on green threads
• A few months back I added a "green threads" userspace implementation
to the userspace rump implementation.
• The default implementation uses pthreads.
• Uniprocessor, single thread
• Useful for embedded implementations
• Also useful if you want to make a deterministic implementation
22
PCI support
• Some PCI support has been added
• Linux userspace support.
• Linux has uio and vfio frameworks for userspace pci drivers.
• uio supported now, only works for some cards
• vfio may be later; requires an iommu.
• Can be used for developing NetBSD drivers even so - used for wireless
development
• Really want to add BSD support
23
rump on bare metal
• New project to run a rump kernel on (currently x86) bare metal
• https://github.com/rumpkernel/rumpuser-baremetal
• Includes PCI support, with virtio drivers for KVM, bhyve
• Only a few hundred lines of code to deal with interrupts etc, written in a
week
• Planning ARM port to mbed
24
rump on microkernels
• Genode, a microkernel OS framework, has started using the rump kernel
to support NetBSD file system drivers on microkernels.
• Less than 3,000 lines of (untrusted) glue code.
• See genode.org for more
• Minix3 is another potential user, it already uses a lot of NetBSD code.
25
Logo
26
Architecture
Four different environments
• hosted, e.g. userspace
• paravirtualized, e.g. Xen
• "bare metal", e.g. hardware or hypervisor with virtio
• microkernels (as servers)
28
Architecture
29
Documentation
• Documentation is much improved.
• All at http://wiki.rumpkernel.org/
• Best places to start are Getting Started and Kernel development
tutorials.
• A longer introduction is the rump kernel book
30
Use cases
1. Driver development
2. Tests
3. Drivers for other environments
4. Applications with userspace drivers, eg networking
5. Running code securely eg file system code
6. Very lightweight "containers" with their own OS library
7. ...
31
What needs doing?
• Upstream and improve rumprun
• Improve documentation
• Portability: native Windows, OSX
• Userspace IP stacks: need good performance on 10Gb
• dogfooding
• ...
32
Get involved
• http://rumpkernel.org/
• Freenode #rumpkernel
• Mailing list rumpkernel-users
• twitter @rumpkernel
• 25 November operatingsystems.io conference in London
• 26 November hackday in London
• Fosdem 2015
33

More Related Content

PDF
A Reimplementation of NetBSD Based on a Microkernel by Andrew S. Tanenbaum
PDF
Introduction to NetBSD kernel
PDF
NetBSD and Linux for Embedded Systems
PPTX
Windows Internals for Linux Kernel Developers
PDF
Linux Locking Mechanisms
PDF
Linuxcon Barcelon 2012: LXC Best Practices
PPTX
Realizing Linux Containers (LXC)
PPTX
Containers are the future of the Cloud
A Reimplementation of NetBSD Based on a Microkernel by Andrew S. Tanenbaum
Introduction to NetBSD kernel
NetBSD and Linux for Embedded Systems
Windows Internals for Linux Kernel Developers
Linux Locking Mechanisms
Linuxcon Barcelon 2012: LXC Best Practices
Realizing Linux Containers (LXC)
Containers are the future of the Cloud

What's hot (20)

PDF
Advanced Namespaces and cgroups
PDF
The Linux Block Layer - Built for Fast Storage
PDF
Making Linux do Hard Real-time
PDF
Kernel Recipes 2015 - So you want to write a Linux driver framework
PPTX
First steps on CentOs7
PPTX
Introduction to linux containers
PDF
Modern net bsd kernel module
PPTX
Linux Interrupts
PDF
High Performance Storage Devices in the Linux Kernel
PDF
Virtualization which isn't: LXC (Linux Containers)
PDF
Linux cgroups and namespaces
PPT
Basic Linux Internals
PPTX
Linux containers – next gen virtualization for cloud (atl summit) ar4 3 - copy
PDF
Containers and Namespaces in the Linux Kernel
PDF
Kernel Recipes 2015: Kernel packet capture technologies
PDF
Kvm performance optimization for ubuntu
PDF
Mastering Real-time Linux
PDF
Containers with systemd-nspawn
PPSX
FD.io Vector Packet Processing (VPP)
PDF
Porting Xen Paravirtualization to MIPS Architecture
Advanced Namespaces and cgroups
The Linux Block Layer - Built for Fast Storage
Making Linux do Hard Real-time
Kernel Recipes 2015 - So you want to write a Linux driver framework
First steps on CentOs7
Introduction to linux containers
Modern net bsd kernel module
Linux Interrupts
High Performance Storage Devices in the Linux Kernel
Virtualization which isn't: LXC (Linux Containers)
Linux cgroups and namespaces
Basic Linux Internals
Linux containers – next gen virtualization for cloud (atl summit) ar4 3 - copy
Containers and Namespaces in the Linux Kernel
Kernel Recipes 2015: Kernel packet capture technologies
Kvm performance optimization for ubuntu
Mastering Real-time Linux
Containers with systemd-nspawn
FD.io Vector Packet Processing (VPP)
Porting Xen Paravirtualization to MIPS Architecture
Ad

Similar to Running Applications on the NetBSD Rump Kernel by Justin Cormack (20)

PDF
Unikernel User Summit 2015: Getting started in unikernels using the rump kernel
PDF
CPOSC2014: Next Generation Cloud -- Rise of the Unikernel
PDF
Unikernel User Summit 2015: The Next Generation Cloud: Unleashing the Power o...
PDF
Next Generation Cloud: Rise of the Unikernel V3 (UPDATED)
PDF
SCALE13x: Next Generation of the Cloud - Rise of the Unikernel
PDF
The Next Generation Cloud: Unleashing the Power of the Unikernal
ODP
Linux26 New Features
PDF
Linux rumpkernel - ABC2018 (AsiaBSDCon 2018)
PPTX
Linux Container Brief for IEEE WG P2302
PDF
Introduction to anykernels using rump kernels
PDF
The daemon in puppets
PDF
PuppetCamp SEA 1 - Puppet & FreeBSD
PDF
PuppetCamp SEA 1 - Puppet & FreeBSD
PDF
Introducing NetBSD 5.0
PPTX
Introduction to OS LEVEL Virtualization & Containers
PDF
The State of Rootless Containers
PDF
Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic - LinuxCon
PDF
Java in containers
PDF
LibOS as a regression test framework for Linux networking #netdev1.1
PDF
Not breaking userspace: the evolving Linux ABI
Unikernel User Summit 2015: Getting started in unikernels using the rump kernel
CPOSC2014: Next Generation Cloud -- Rise of the Unikernel
Unikernel User Summit 2015: The Next Generation Cloud: Unleashing the Power o...
Next Generation Cloud: Rise of the Unikernel V3 (UPDATED)
SCALE13x: Next Generation of the Cloud - Rise of the Unikernel
The Next Generation Cloud: Unleashing the Power of the Unikernal
Linux26 New Features
Linux rumpkernel - ABC2018 (AsiaBSDCon 2018)
Linux Container Brief for IEEE WG P2302
Introduction to anykernels using rump kernels
The daemon in puppets
PuppetCamp SEA 1 - Puppet & FreeBSD
PuppetCamp SEA 1 - Puppet & FreeBSD
Introducing NetBSD 5.0
Introduction to OS LEVEL Virtualization & Containers
The State of Rootless Containers
Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic - LinuxCon
Java in containers
LibOS as a regression test framework for Linux networking #netdev1.1
Not breaking userspace: the evolving Linux ABI
Ad

More from eurobsdcon (20)

PDF
EuroBSDCon 2014 Program Front
PDF
EuroBSDCon 2014 tutorials program Thursday & Friday
PDF
EuroBSDCon 2014 Sofia Welcome
PDF
EuroBSDCon 2014 Sofia Closing talk
PDF
Submitting documents anonymously by Atanas Chobanov
PDF
Porting the drm/kms graphic drivers to DragonFlyBSD by Francois Tigeot
PDF
University of Oslo's TSD service - storing sensitive & restricted data by D...
PDF
secure lazy binding, and the 64bit time_t development process by Philip Guenther
PDF
The entropic principle: /dev/u?random and NetBSD by Taylor R Campbell
PDF
The LLDB Debugger in FreeBSD by Ed Maste
PDF
Porting Valgrind to NetBSD and OpenBSD by Masao Uebayashi
PDF
Multiplatform JIT Code Generator for NetBSD by Alexander Nasonov
PDF
OpenStack and OpenContrail for FreeBSD platform by Michał Dubiel
PDF
Porting NetBSD to the LatticeMico32 open source CPU by Yann Sionneau
PDF
Smartcom's control plane software, a customized version of FreeBSD by Boris A...
PDF
Bugs Ex Ante by Kristaps Dzonsons
PDF
Cross Building the FreeBSD ports tree by Baptiste Daroussin
PDF
Building packages through emulation by Sean Bruno
PDF
Making OpenBSD Useful on the Octeon Network Gear by Paul Irofti
PDF
Using routing domains / routing tables in a production network by Peter Hessler
EuroBSDCon 2014 Program Front
EuroBSDCon 2014 tutorials program Thursday & Friday
EuroBSDCon 2014 Sofia Welcome
EuroBSDCon 2014 Sofia Closing talk
Submitting documents anonymously by Atanas Chobanov
Porting the drm/kms graphic drivers to DragonFlyBSD by Francois Tigeot
University of Oslo's TSD service - storing sensitive & restricted data by D...
secure lazy binding, and the 64bit time_t development process by Philip Guenther
The entropic principle: /dev/u?random and NetBSD by Taylor R Campbell
The LLDB Debugger in FreeBSD by Ed Maste
Porting Valgrind to NetBSD and OpenBSD by Masao Uebayashi
Multiplatform JIT Code Generator for NetBSD by Alexander Nasonov
OpenStack and OpenContrail for FreeBSD platform by Michał Dubiel
Porting NetBSD to the LatticeMico32 open source CPU by Yann Sionneau
Smartcom's control plane software, a customized version of FreeBSD by Boris A...
Bugs Ex Ante by Kristaps Dzonsons
Cross Building the FreeBSD ports tree by Baptiste Daroussin
Building packages through emulation by Sean Bruno
Making OpenBSD Useful on the Octeon Network Gear by Paul Irofti
Using routing domains / routing tables in a production network by Peter Hessler

Recently uploaded (20)

PPTX
Benefits of Physical activity for teenagers.pptx
PPTX
AI IN MARKETING- PRESENTED BY ANWAR KABIR 1st June 2025.pptx
PDF
STKI Israel Market Study 2025 version august
PDF
How ambidextrous entrepreneurial leaders react to the artificial intelligence...
PDF
Produktkatalog für HOBO Datenlogger, Wetterstationen, Sensoren, Software und ...
PDF
A proposed approach for plagiarism detection in Myanmar Unicode text
PDF
TrustArc Webinar - Click, Consent, Trust: Winning the Privacy Game
PDF
OpenACC and Open Hackathons Monthly Highlights July 2025
PPT
What is a Computer? Input Devices /output devices
PPTX
2018-HIPAA-Renewal-Training for executives
PPTX
Modernising the Digital Integration Hub
PDF
Hindi spoken digit analysis for native and non-native speakers
PDF
sustainability-14-14877-v2.pddhzftheheeeee
PDF
The influence of sentiment analysis in enhancing early warning system model f...
PDF
Convolutional neural network based encoder-decoder for efficient real-time ob...
PPT
Module 1.ppt Iot fundamentals and Architecture
PDF
Hybrid horned lizard optimization algorithm-aquila optimizer for DC motor
PDF
Five Habits of High-Impact Board Members
PDF
Architecture types and enterprise applications.pdf
PPTX
Custom Battery Pack Design Considerations for Performance and Safety
Benefits of Physical activity for teenagers.pptx
AI IN MARKETING- PRESENTED BY ANWAR KABIR 1st June 2025.pptx
STKI Israel Market Study 2025 version august
How ambidextrous entrepreneurial leaders react to the artificial intelligence...
Produktkatalog für HOBO Datenlogger, Wetterstationen, Sensoren, Software und ...
A proposed approach for plagiarism detection in Myanmar Unicode text
TrustArc Webinar - Click, Consent, Trust: Winning the Privacy Game
OpenACC and Open Hackathons Monthly Highlights July 2025
What is a Computer? Input Devices /output devices
2018-HIPAA-Renewal-Training for executives
Modernising the Digital Integration Hub
Hindi spoken digit analysis for native and non-native speakers
sustainability-14-14877-v2.pddhzftheheeeee
The influence of sentiment analysis in enhancing early warning system model f...
Convolutional neural network based encoder-decoder for efficient real-time ob...
Module 1.ppt Iot fundamentals and Architecture
Hybrid horned lizard optimization algorithm-aquila optimizer for DC motor
Five Habits of High-Impact Board Members
Architecture types and enterprise applications.pdf
Custom Battery Pack Design Considerations for Performance and Safety

Running Applications on the NetBSD Rump Kernel by Justin Cormack

  • 1. Running Applications on the NetBSD Rump Kernel Justin Cormack @justincormack
  • 4. What is a rump kernel? It is the (NetBSD) kernel without support for • executing binaries • scheduling threads • managing hardware privilege levels • most memory management eg virtual memory 4
  • 5. Just drivers • Drivers are the bit of the kernel that turns raw hardware into nice abstractions like files and sockets • Get something else (host) to do the other parts (host environment) • Or do without it, just compile in single purpose application. 5
  • 6. What use is that? • You get the missing capabilities from a hypercall layer. • Like a very simple virtual machine • man 3 rumpuser • Provides memory allocation, threads, mutexes, console output, random numbers, clock • This can run in userspace for example, but can be implemented in any environment fairy easily 6
  • 7. What use is that? • Original use cases around testing drivers. • You can test a kernel driver without booting the OS. • You can test much of the OS without booting into it. • Debugging is easy as it is just a userpsace program • Also for running kernel drivers in userspace eg for file systems 7
  • 8. How was it used? • Typically either written for rump like the NetBSD tests rump_init(); rump_sys_mkdir(path, 0777); • or using LD_PRELOAD to change some calls using rumphijack library • The interface was essentially the syscall interface (minus parts not supported by rump) 8
  • 10. Xen port • In August last year we got a Xen port of the rump kernel working. In addition to porting the hypercall layer, we also got NetBSD libc to compile against the rump kernel. • We replaced the syscalls in libc with calls to the rump kernel syscall implementations. • This enabled running real applications, in particular we had LuaJIT running, and a simple web server. • Not just syscalls, more of a POSIX API. 10
  • 11. Increased portability The POSIX implementation of the rump kernel now runs on • NetBSD • FreeBSD, OpenBSD, DragonflyBSD • Solaris • Linux, including Android • on architectures including arm, x86, amd64, powerpc, sparc64 and mips 11
  • 12. Increased testing There is continuous integration using TravisCI and buildbot • Tests all commits to the buildrump.sh script on multiple operating systems and architectures • Tests NetBSD -current hourly on multiple operating systems and architectures • Good test of NetBSD portability issues • Uses ljsyscall to test functionality - good syscall coverage, fast. 12
  • 15. rumprun-posix • Late last year I started work on rumprun, which allowed running unmodified NetBSD binaries with the rump kernel. • The main issue with this is that you have two libcs involved, so there are symbol conflicts. However with judicious symbol renaming it turned out to be possible to fix this. • In particular you can compile userspace binaries for the core NetBSD commands like ifconfig, etc. • Can test userspace without booting into OS 15
  • 16. How does it work? • Compile NetBSD object code and libraries on host machine • Link code and libraries to new object with -nostdinc • Rename read symbols to rump___sysimpl_read ... • Fix up main and other things which will be called from a stub • Localise symbols to avoid conflicts • Link with host libc and rump libraries • See script for more details, it is messy... 16
  • 17. # ./rumpdyn/bin/rump_allserver unix://sock # export RUMP_SERVER=unix://sock # ./bin/ifconfig lo0: flags=8049 mtu 33648 inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 inet 127.0.0.1 netmask 0xff000000 # ./bin/ping -o 127.0.0.1 PING 127.0.0.1 (127.0.0.1): 64 data bytes 64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=0.000000 ms ----127.0.0.1 PING Statistics---- 1 packets transmitted, 1 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 0.000000/0.000000/0.000000/0.000000 ms 17
  • 18. Supported commands arp cp dumpfs fsck_msdos ls mount_ext2fs ndp pax reboot sysctl wpa_supplicant cat dd ed halt mkdir mount_ffs newfs pcictl rm umount cgdconfig df fsck ifconfig mknod mount_msdos newfs_ext2fs ping rmdir vnconfig chmod disklabel fsck_ext2fs ktrace modstat mount_tmpfs newfs_msdos ping6 rndctl wlanctl chown dump fsck_ffs ln mount mv npfctl raidctl route wpa_passphrase 18
  • 19. What runs? • Almost anything in the NetBSD core can probably be compiled • There is now a cross compiler for rumprun, that should work with most code • There is experimental pthreads support, not yet well tested • Programs that fork or use other things not supported by rump may be a problem • Some of the missing rump features are emulated or partially emulated, eg anon mmap 19
  • 20. rumprun - TODOs • Clean up and upstream libc build modifications • Fix other architectures, currently only working on x86, amd64 • Build more of userspace tools and libraries • Use for NetBSD tests - ability to run tests on a kernel without booting it very useful when developing. • Improve build process • Continuous integration and testing on NetBSD current. 20
  • 22. rump on green threads • A few months back I added a "green threads" userspace implementation to the userspace rump implementation. • The default implementation uses pthreads. • Uniprocessor, single thread • Useful for embedded implementations • Also useful if you want to make a deterministic implementation 22
  • 23. PCI support • Some PCI support has been added • Linux userspace support. • Linux has uio and vfio frameworks for userspace pci drivers. • uio supported now, only works for some cards • vfio may be later; requires an iommu. • Can be used for developing NetBSD drivers even so - used for wireless development • Really want to add BSD support 23
  • 24. rump on bare metal • New project to run a rump kernel on (currently x86) bare metal • https://github.com/rumpkernel/rumpuser-baremetal • Includes PCI support, with virtio drivers for KVM, bhyve • Only a few hundred lines of code to deal with interrupts etc, written in a week • Planning ARM port to mbed 24
  • 25. rump on microkernels • Genode, a microkernel OS framework, has started using the rump kernel to support NetBSD file system drivers on microkernels. • Less than 3,000 lines of (untrusted) glue code. • See genode.org for more • Minix3 is another potential user, it already uses a lot of NetBSD code. 25
  • 28. Four different environments • hosted, e.g. userspace • paravirtualized, e.g. Xen • "bare metal", e.g. hardware or hypervisor with virtio • microkernels (as servers) 28
  • 30. Documentation • Documentation is much improved. • All at http://wiki.rumpkernel.org/ • Best places to start are Getting Started and Kernel development tutorials. • A longer introduction is the rump kernel book 30
  • 31. Use cases 1. Driver development 2. Tests 3. Drivers for other environments 4. Applications with userspace drivers, eg networking 5. Running code securely eg file system code 6. Very lightweight "containers" with their own OS library 7. ... 31
  • 32. What needs doing? • Upstream and improve rumprun • Improve documentation • Portability: native Windows, OSX • Userspace IP stacks: need good performance on 10Gb • dogfooding • ... 32
  • 33. Get involved • http://rumpkernel.org/ • Freenode #rumpkernel • Mailing list rumpkernel-users • twitter @rumpkernel • 25 November operatingsystems.io conference in London • 26 November hackday in London • Fosdem 2015 33