The project has developed the first version of a replicated kernel OS model for Linux, called Popcorn Linux. This version implements a set of techniques to support replicated-kernel execution and ISA heterogeneity, including that for the boot process, processor grouping, memory management, device driver management, and inter-kernel communication. Popcorn currently runs on x86 64bit architectures. (We also have an unmaintained port on x86 32bit.)


To boot Linux on a subset of hardware resources we added Linux boot parameters to limit the hardware resource discovered, initialized and loaded by any kernel. After the first kernel is loaded by the bootloader, other, secondary, kernels can be loaded from this primary kernel by a modified version of kexec. We developed a new version of the Linux trampoline code to boot a secondary kernel on x86.

Communicating Kernels

Kernels communicate by messages. Each time a kernel boots up, it registers itself on the messaging layer. We define a set of services that can register notifications on every kernel, but only the interested kernels are notified. The current implementation uses a combination of messages over shared memory and inter-processor interrupts with an interrupt mitigation strategy similar to the NAPI layer.

Interacting with different Kernels

We implemented a high-performance in-kernel virtual network interface, that allows processes running on secondary kernels to have network access if required.  Applications, however, can rely on standard inter-process communication techniques, like shared memory, which works on multiple kernels operating on cache coherent kernels ,or message-passing on other hardware.  For example, we used inter-kernel shared memory to provide a MPICH2 Nemesis channel for running MPI applications on Popcorn.  Finally, if the user needs to log into a secondary kernel directly, for debugging purposes, then they can ssh over the in-kernel virtual network, or we provide virtual TTYs between kernels for when the networking itself needs debugging.

Usage Scenarios

Popcorn Linux can be used as

  • A single system image operating system for future heterogeneous-ISA platforms.
  • An alternative to virtualization, although not as secure as virtual machines, Popcorn extensions to the Linux kernel enable kernel instances to run on the same physical machine without paying the overhead of virtualization.
  • A compute node/IO node configuration (also called full and light kernels); you can compile two different kernel images, one with all device drivers and services and the other with a minimal processor support along with a minimal ramdisk.
  • To run an application in isolation; a real-time kernel can run its application in total isolation while all other kernels can provide services while not interfering with the real-time execution.
  • A monolithic replicated-kernel operating system for educational and research purposes.







  • "Video tutorial: booting Popcorn Linux on 64 cores", ECE Department, Virginia Tech, May 2013 (WMV encoding, 512kbps, 8mbps)
  • "Video tutorial: process migration between two kernels", ECE Department, Virginia Tech, May 2013 (WMV encoding, 512kbps, 8mbps)



Former Members

  • Curt Albert, Naval Surface Warfare Center, Dahlgren, VA, USA
  • Siraji Ali, Virginia Tech, VA, USA
  • Brandon Amos, Carnegie Mellon University, PA, USA
  • Saif Ansary, CISCO System, San Jose, CA, USA
  • Antonio Barbalace, Huawei European Research Center, Munich, Germany
  • Sharath Bhat, Virginia Tech, VA, USA
  • Arijit Chattopadhyay, Bloomberg, New York, NYC, USA
  • Michael Drescher, Virginia Tech, VA, USA
  • Shawn Furrow, Lockheed Martin, VA, USA
  • David Katz, The Johns Hopkins University Applied Physics Laboratory, Laurel, MA, USA
  • Charlie Kendir, L3 Communications, TX, USA
  • Thomas Lazor, Virginia Tech, VA, USA
  • Vincent Legout, gandi.net (Gandi SAS), Paris, France
  • Giuliano Losa, UCLA, CA, USA
  • Lukas Lozovski, Virginia Tech, VA, USA
  • Andy Martin, Qualcomm, NC, USA
  • Sean Moore, Virginia Tech, VA, USA
  • Alastair Murray, CodePlay, Edinburgh, UK
  • Akshay Ravichandran, Hughues Network, Germantown, Maryland, USA
  • Deepak Rajendrakumaran, Virginia Tech, VA, USA
  • Marina Sadini, Apple, CA, USA
  • Ajithchandra Saya, Virginia Tech, VA, USA
  • Alexander Sung, Virginia Tech, VA, USA
  • Ben Shelton, Intel Corporation, Austin, TX, USA
  • Sujit Thumma, Virginia Tech, VA, USA
  • Yuzhong Wen, Qualcomm, CA, USA
  • Xiaolong Wu, Virginia Tech, VA, USA


  • Jens Meier
  • Phil Wilshire

Open Positions

Two postdoctoral positions are available in the Systems Software Research Group at Virginia Tech's ECE Department on projects involving scalable multicore operating systems and multicore virtualization with quality of service guarantees. Recent computer science or computer engineering PhD graduates with background in operating systems, virtualization, dependability, and distributed systems are sought for both positions. Strong programming expertise with the Linux kernel and/or Linux-based hypervisors such as KVM and Xen is required.

Both positions are for two-year minimum, with strong possibilities for additional years, and have no teaching obligations. Contact Prof. Binoy Ravindran ( This email address is being protected from spambots. You need JavaScript enabled to view it. ) with a CV or for any questions.