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 AbstractConventional 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. Keywordsbare 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