NASA's OSAL keeps flight software off the operating system
The Core Flight System (cFS) Operating System Abstraction Layer (OSAL)
At a glance
- What is it?
- OSAL is the Core Flight System's operating system abstraction layer, a C library of APIs and a BSP framework that lets the same flight code build on a POSIX desktop, an RTOS and flight hardware. It suits a team porting cFS to new hardware, and it is a poor fit for an application that only needs threads and files.
- Who is it for?
- OSAL is worth adopting if you are building or porting Core Flight System software, because the abstraction it provides is the one cFS missions actually fly, with a generic-linux BSP that lets the same code run on a workstation for development. It is the wrong dependency for a general embedded project, since it is designed to sit under one specific flight framework rather than to be a portable RTOS abstraction for arbitrary software, and its configuration surface is not small.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly C, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What the abstraction layer is actually for
OSAL is NASA's Operating System Abstraction Layer, and it is a framework component of the Core Flight System. The readme describes it as a collection of abstraction APIs and associated framework, and it is intended to be located in the osal subdirectory of a cFS Mission Tree. That last detail is the important one for a reader deciding whether this is relevant. OSAL is not a general purpose portability layer you drop into any embedded project. It is a specific component of a specific flight software framework, and it exists so that cFS applications and services can be written once and then run on different operating systems underneath. The cFS is the framework that provides the services, and OSAL is the layer that hides the operating system from everything above it. That is the audience. A team writing a control loop for a spacecraft, or an engineer porting an existing cFS mission to a new processor, is the person who needs this. A team that wants threads, semaphores and file access on a microcontroller is looking for a different library, and using OSAL there would mean adopting a flight framework you do not otherwise want.
The BSP is the platform, and the type is chosen at configure time
The architecture is visible in the build system rather than in a diagram. The OSAL library build on a PC Linux system is done from the base osal directory with a short CMake sequence, and the one option that matters is the BSP type:
mkdir build_osal
cd build_osal
cmake -DOSAL_SYSTEM_BSPTYPE=generic-linux ..
makeOSAL_SYSTEM_BSPTYPE=generic-linux selects the portable POSIX implementation, which is what makes the layer testable on a workstation at all. The same option takes a different value for a specific RTOS or for flight hardware, and the name BSP, board support package, is the vocabulary the project uses. The top level file list shows how much of the plumbing lives outside the src/ directory. There is default_config.cmake and NasaOsalConfig.cmake.in for configuration, osconfig.h.in for the generated configuration header, check_header.c.in and check_header.cpp.in for the compile-time configuration checks, and version_info.cmake for the version. The src/ directory then holds the portable core plus the per-platform implementations, and ut_assert/ holds the assertion helpers used by the unit tests. The design is the familiar layered one, with a portable API on top and a platform layer underneath, and the practical consequence is that porting to new hardware means writing a new BSP rather than touching the code above it.
Unit tests need permissive mode, and that is a different build
The second build example in the readme exists to run the unit tests, and the difference between the two cmake invocations is worth understanding rather than copying blind:
mkdir build_osal_test
cd build_osal_test
cmake -DENABLE_UNIT_TESTS=true -DOSAL_SYSTEM_BSPTYPE=generic-linux -DOSAL_CONFIG_DEBUG_PERMISSIVE_MODE=TRUE ..
make
make testTwo extra options are switched on. ENABLE_UNIT_TESTS turns on the test build, and OSAL_CONFIG_DEBUG_PERMISSIVE_MODE=TRUE puts the library into a permissive mode, which is what allows the test suite to exercise error paths that the flight configuration would reject. The name is the warning. A permissive mode that lets a call succeed where a flight build would fail is exactly the kind of setting that must not be present in a flight configuration, and the readme is explicit that this is the test build while the Configuration Guide is the document to consult for what each option really does. The same separation shows up in the repository layout, where the tests live in their own directory and the CI configuration is referenced from the readme. The project also carries a Makefile.sample at the top level, which is a template for integrating the build into a larger mission tree rather than the primary build path, since the primary path is CMake.
Documentation is generated, and support goes through the cFS project
Two aspects of the documentation arrangement are notable. The user's guide is autogenerated, and the readme points at a PDF hosted on the cFS repository's gh-pages branch rather than in this repository. That means the reference documentation for the API is not a file you will find in the source tree, and it is regenerated rather than hand edited. The configuration side is the opposite, with a Configuration Guide in the docs/ directory of this repository referenced for more information on the build options, and the CHANGELOG.md, CONTRIBUTING.md, SECURITY.md and LICENSE files at the root. Support is organised around the wider project rather than this component. The readme says that for best results you should submit questions and help wanted requests at the cFS repository, and it points at the official cFS page at cfs.gsfc.nasa.gov as the authoritative source. There is also a demonstration bundle of the Core Flight System at the nasa/cFS repository, which includes build and execution instructions, and a separate pointer to a mission ready cFS bundle for anyone who needs a flight qualified configuration rather than the demonstration one. The distinction between those two bundles is the one a reader should hold on to when evaluating this component.
Version, branch and the shape of the release line
The repository is on a dev branch rather than master, which is unusual and worth noting before you pin anything. The release history has two very different textures. The v7.0.0 release, named Draco, is dated 2026-01-26 and v7.0.1 follows on 2026-05-14, so there is a coherent current line with a patch release after the major one. Below that sits equuleus-rc1 from 2023-08-28, an older release candidate that shows the previous naming scheme, where the release was named after a point in the constellation rather than a number. That naming convention has since changed, so the tag list reads as two eras. The maintenance picture underneath is healthy, with the last push on 2026-10-15, which is well within the last six months, and with two CI workflows advertised in the readme badges, one for static analysis and one for a format check. Both are the kind of gate that matters in a flight software project, where a formatting or analysis regression is a review problem. The licence is Apache-2.0, held in the LICENSE file at the root, and no legal interpretation is offered here beyond noting that it is a permissive licence with the usual attribution conditions.
Where OSAL is the wrong choice
The boundary is structural rather than a matter of maturity, and it is worth being blunt about it. OSAL is a component of the Core Flight System framework, and adopting it means adopting the framework's assumptions about configuration, build integration and test structure. It is not a small library you can link into an unrelated embedded project to get portable file and thread APIs, and the build system assumes a cFS Mission Tree layout with OSAL in the osal subdirectory, which is a real constraint when you are integrating it into somebody else's build. The second limit is the size of the configuration surface. The generic-linux BSP exists so that development can happen on a workstation, and the debug permissive mode exists so that the test suite can reach error paths, but both of those are development conveniences layered on top of a configuration model that a flight project has to own deliberately. A team without flight software experience will find more to learn in the Configuration Guide than in the API itself. The alternative approaches differ in kind. A general purpose RTOS abstraction gives you threads and timers without a flight framework, and a bespoke platform layer gives you exactly the API your own code needs, at the cost of writing and maintaining the port yourself. OSAL is the option that buys a large amount of already flight tested infrastructure, provided you are already in the cFS world.
Editorial conclusion
OSAL is worth adopting if you are building or porting Core Flight System software, because the abstraction it provides is the one cFS missions actually fly, with a generic-linux BSP that lets the same code run on a workstation for development. It is the wrong dependency for a general embedded project, since it is designed to sit under one specific flight framework rather than to be a portable RTOS abstraction for arbitrary software, and its configuration surface is not small. Verify first which BSP your target needs and what the configuration guide says about it, that the permissive debug mode you use in unit tests is not left enabled in a flight build, and that the cFS bundle you assemble pins an OSAL version consistent with the mission. The last push was on 2026-10-15 and the newest release is v7.0.1 from 2026-05-14.
Frequently asked questions
What is NASA's OSAL used for?
It is the Operating System Abstraction Layer of the Core Flight System, a collection of abstraction APIs and an associated framework that is meant to sit in the osal subdirectory of a cFS Mission Tree. It lets cFS code run on different operating systems underneath.
How do I build OSAL on a Linux workstation?
From the base osal directory, create a build directory, run cmake with -DOSAL_SYSTEM_BSPTYPE=generic-linux pointing at the parent directory, then run make. The generic-linux BSP is the portable POSIX implementation used for development.
What is OSAL's permissive debug mode for?
The unit test build enables it with -DOSAL_CONFIG_DEBUG_PERMISSIVE_MODE=TRUE alongside -DENABLE_UNIT_TESTS=true, so the test suite can exercise error paths a flight configuration would reject. The Configuration Guide documents the options.
Where do I get the cFS demonstration bundle?
The readme points to the nasa/cFS repository for a demonstration bundle of the Core Flight System with build and execution instructions, and separately points to a mission ready cFS bundle for flight configurations. Support questions are also directed to the cFS repository.
What licence and branch does nasa/osal use?
The licence is Apache-2.0, with the LICENSE file at the repository root, and the default branch is dev rather than master. The newest release is v7.0.1 from 2026-05-14, following v7.0.0 named Draco in January 2026.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/nasa-osal)Was this useful?