XXX-X-XXXX-XXXX-X/XX/$XX.00 ©20XX IEEE
An API for Bare Machine Computing Applications
S. Almutairi
Department of Computer &
Information Sciences
Towson University
Towson, MD 21252
salmut2@students.towson.edu
R. Karne
Department of Computer &
Information Sciences
Towson University
Towson, MD 21252
rkarne@towson.edu
A. Wijesinha
Department of Computer &
Information Sciences
Towson University
Towson, MD 21252
awijesinha@towson.edu
H. Chang
Department of Mathematics &
Computer Science
Susquehanna University
Selinsgrove, PA 17870
changh@susqu.edu
R. Almajed
Department of Computer &
Information Sciences
Towson University
Towson, MD 21252
ralmaj1@students.towson.edu
H. Alabsi
College of Business,
Mathematics & Science
Bemidji State University
Bemidji, MN 56601
hamdan.alabsi@bemidjistate.edu
W. Thompson
Department of Computer &
Information Sciences
Towson University
Towson, MD 21252
wvthompson@towson.edu
N. Soundararajan
Department of Computer &
Information Sciences
Towson University
Towson, MD 21252
nsound1@students.towson.edu
Abstract—Conventional computing systems require some
form of an OS or kernel to run applications. These include
minimal OSs and small kernels such as tiny Linux kernels, and
embedded OSs. In a bare machine computing (BMC) system
there is no OS or kernel, thus enabling applications to be
completely self-supporting while eliminating OS vulnerabilities
and overhead. These applications, which are currently written in
C/C++ with some assembly code, run on desktops or laptops with
Intel x86 CPUs, and integrate the necessary BMC software and
hardware interfaces. This paper provides internal details of
several such BMC interfaces showing how they are designed,
implemented and integrated with OS-independent applications.
BMC interfaces could be adapted in future for use in database
servers for Big Data applications, controllers for software
defined networking, and IoT devices or smart phones with a view
towards improving security and performance.
Keywords—bare machine computing, application programming
interface, operating systems, Intel x86, network applications,
hardware interfaces
I. INTRODUCTION
Conventional computing is based on some form of an
operating system (OS) or kernel that provides an execution
environment to run applications. Bare machine computing
(BMC) [1] is an alternative to conventional computing that
allows applications to run without requiring any OS
components. BMC applications communicate directly to the
hardware by means of a hardware API, and a software API
consisting of commonly used functions. Our goal in this paper
is to provide sufficient details of the existing BMC APIs and
their usage in applications so that future implementers can
extend or adapt these interfaces enabling them to be used in
new domains.
A BMC application, which is referred to as an application
object (AO) [2], is self-supporting in that all of the code needed
for it to run is included in the AO. There is thus no OS, kernel
or intermediary software in the BMC approach making it
different from minimal OSs such as bare metal systems, tiny
Linux kernels, and embedded OSs. BMC systems retain the
advantages of such minimal systems including better
performance and simplicity. In addition, BMC applications
provide more security since they have no OS vulnerabilities, do
not support dynamic linking, and their small size enables easier
analysis for security flaws. A bare machine consists of CPU,
memory, and the necessary I/O. There is no permanent storage
such as a hard disk in the machine. BMC Web servers [3], mail
servers [4], SIP-based VoIP systems [5], gateways with NAT,
IPv6-v4 translation and IPsec [6][7], file systems [8], and
SQLite databases [9] have been previously built by using the
BMC APIs. At present, BMC applications run on Intel x86
desktops or laptops that serve as a bare machine. However, it is
possible to transform a BMC application to run on the ARM
architecture [10]. The BMC APIs could be used in IoT devices
or smart phones by adapting them to work with a given
hardware architecture. A bare machine can also be used as an
IoT gateway, a database server to support Big Data
applications, or a controller in a software defined network.
II. CONVENTIONAL VERSUS BMC INTERFACES
In conventional computing, system calls from system
libraries are linked with the code at link time enabling
applications to run. In case of an API instead of system calls,
API libraries are linked at link time as well. In either case, the
interfaces are controlled by the underlying OS at execution
time. Also, it is generally not possible to use such interfaces as
is with a different OS or platform. Fig. 1 illustrates
conventional computing and compares it with the BMC
approach. In a BMC application, the API becomes a part of the
application program/code and is compiled statically. There are
no system calls or system libraries to be linked with the
program. The hardware interface is also compiled with the
application program and one monolithic executable is created
that runs on a bare machine. BMC applications run