SBOM Provider Briefing · Medical Device / FDA Cyber Device Context

ArduPilot Repository Overview
for SBOM Scan Configuration

An inventory-oriented analysis of github.com/ardupilot/ardupilot prepared so the SBOM tooling provider can configure the correct scan modules, dependency sources, and report structure before generating the production Software Bill of Materials for an FDA submission.

Repository: ardupilot/ardupilot
License: GPLv3 (with per-component licenses)
Languages: C++ · C · Python · Lua
Build system: Waf (customized)
Report date: 2026-10-20

1Purpose and Intended Use of This Report

This document is not the SBOM itself. It is a pre-scan briefing: a map of what lives in the ArduPilot repository and what the SBOM tools provider needs to enable so the resulting SBOM is complete enough for an FDA premarket cyber device submission under Section 524B of the FD&C Act.

Key instruction to the provider
ArduPilot is a source-only project with no package manager manifest for its embedded dependencies. A package-manager-only scan will miss most of the third-party inventory. Scanning must combine recursive Git submodule resolution with vendored-source fingerprinting, and the final SBOM must describe the configured production binary (board, vehicle, feature set), not just the whole repository.
Before generating the production SBOM
Pin the exact release tag of ardupilot that the device firmware is built from, run git submodule update --init --recursive, and record the commit SHA of every submodule. All figures in this report describe the current master branch and must be regenerated for the exact submission revision.

2Repository at a Glance

~700k
lines of code, core tree (developer documentation figure; regenerate with cloc for the pinned revision)
150+
shared library directories under libraries/ (the first-party platform)
15
declared Git submodules in .gitmodules, plus additional vendored source
6
hardware abstraction layers (ChibiOS, Linux, SITL, ESP32, QURT, Empty)
7+
vehicle firmware families (Copter, Heli, Plane, Rover, Sub, AntennaTracker, Blimp)
100s
of board configurations and driver backends discovered from hwdef.dat files

3Top-Level Directory Map

PathContents and SBOM relevance
ArduCopter/Multirotor and traditional-helicopter vehicle application: flight modes, failsafes, control loops, vehicle configuration.
ArduPlane/Fixed-wing, glider, VTOL/QuadPlane and tailsitter application.
Rover/Ground rover, boat, sailboat and balance-bot application.
ArduSub/Underwater ROV application.
AntennaTracker/Telemetry-driven antenna tracking firmware.
Blimp/Lighter-than-air vehicle firmware.
libraries/Primary first-party scan scope. The shared platform: HALs, estimators (EKF), controllers, hundreds of sensor and actuator drivers, MAVLink, CAN, networking, logging, filesystems, Lua scripting, and safety functions.
modules/Primary third-party inventory location. Git submodules and externally sourced libraries. Must be resolved recursively with exact commit SHAs.
Tools/Build extensions (ArduPilot waf), bootloaders, AP_Periph peripheral firmware, I/O co-processor firmware, SITL/autotest, ROS 2 support, MAVProxy add-ons, deployment scripts.
tests/, benchmarks/Python tests and GoogleTest / Google Benchmark based unit and benchmark suites (test-framework dependencies enter the toolchain SBOM).
waf, wscriptBuild entry point and central build graph. All vehicle targets and feature switches are registered here.
.gitmodulesAuthoritative submodule URL inventory; the starting point for third-party dependency resolution.

4Firmware Families and Build Targets

Each family is a separately built application registered in the root wscript. The submitted SBOM should name the family and vehicle configuration actually shipped on the device.

FamilyWaf commandProduced application
Copter (multirotor)./waf copterarducopter
Traditional helicopter./waf heliarducopter-heli
Plane / VTOL./waf planearduplane
Rover / boat./waf roverardurover
Sub (underwater)./waf subardusub
Antenna tracker./waf antennatrackerantennatracker
Blimp./waf blimpblimp
CAN peripheral firmware./waf AP_PeriphAP_Periph (DroneCAN / UART peripherals)
Supporting targetsbootloader, iofirmware, replayBootloader, I/O co-processor, replay tools

5Hardware Platforms, HAL and RTOS Mapping

The build target determines which RTOS, toolchain, and driver set enters the binary. The provider needs to know which platform family the medical device uses so reachability analysis can be scoped to that configuration.

Platform / HALRuntime and toolchainNotes
ChibiOSChibiOS/RT on STM32 (Cortex-M4/M7, F4/F7/H7), arm-none-eabi-gccMain embedded flight-controller target. Board definitions in libraries/AP_HAL_ChibiOS/hwdef/. Includes Cube/Pixhawk-class boards.
SITLNative host process (Linux / macOS / WSL)Software-in-the-loop simulation; typically part of the verification environment, not the shipped device.
LinuxPOSIX Linux SBC targets (BeagleBone, Navio, Navigator class)Full Linux userland stack applies.
ESP32ESP-IDF / FreeRTOS on ESP32 and ESP32-S3Second RTOS family to configure if used.
QURTQualcomm Hexagon / QURTNiche target; confirm applicability.
EmptyStub HALUsed for porting and compile testing; not a product target.

The AP_HAL layer (libraries/AP_HAL) defines scheduler, threading, UART/SPI/I2C/CAN, GPIO, RC, storage, and timing interfaces. Board-specific feature selection matters: constrained boards compile out features, so two binaries from the same source tree can have different component inventories.

6Third-Party and Vendored Dependency Inventory

6.1 Declared Git submodules (from .gitmodules)

ComponentPurpose
modules/wafBuild framework (Waf)
modules/ChibiOSEmbedded RTOS and MCU platform support
modules/mavlinkMAVLink protocol definitions and generator
modules/DroneCAN/DSDLDroneCAN data type definitions
modules/DroneCAN/pydronecanPython DroneCAN tooling (host side)
modules/DroneCAN/dronecan_dsdlcDSDL compiler
modules/DroneCAN/libcanardEmbedded DroneCAN transport implementation
modules/Micro-XRCE-DDS-ClientEmbedded DDS / XRCE client
modules/Micro-CDRCDR serialization
modules/lwipEmbedded TCP/IP stack
modules/littlefsEmbedded filesystem
modules/gtestUnit test framework
modules/gbenchmarkBenchmark framework
modules/gsoapSOAP / ONVIF camera support

6.2 Vendored and copied source inside libraries/ (no manifest, needs fingerprinting)

Provider configuration note
Enable both (a) recursive Git/submodule analysis recording URL and exact commit for every submodule, and (b) embedded/vendored library fingerprinting for copied source under libraries/. Submodule-only scanning undercounts; fingerprint-only scanning misattributes. Both are required for a defensible inventory.

7Scripting and Middleware Components

ComponentRole and SBOM treatment
Lua scriptinglibraries/AP_Scripting embeds a customized Lua 5.3.6 interpreter with generated C++ bindings. User scripts load from SD card (APM/scripts) or are embedded into ROMFS at build time. Deployed Lua scripts must be inventoried and hashed separately from the firmware binary, because scripts can change runtime behavior without changing the binary.
MAVLinkMessage definitions from the modules/mavlink submodule; headers generated at build time into libraries/GCS_MAVLink/include/mavlink/v2.0. This is the primary external command, telemetry, and ground-control interface. MAVLink 2 supports message signing; command authorization is a system-level control to assess separately.
DroneCAN / libcanardCAN peripheral ecosystem: DSDL type definitions, libcanard embedded transport, AP_Periph node firmware.
DDS / ROS 2Micro XRCE-DDS client and Micro-CDR serialization; ROS 2 integration tooling under Tools/ros2.
lwIPEmbedded TCP/IP networking stack (submodule).
gSOAP / ONVIFCamera discovery and control interface (submodule).
MAVProxyNot part of this repository's runtime. MAVProxy is a separate Python ground-control/router project. ArduPilot only carries SITL launch tooling and plug-ins under Tools/mavproxy_modules. If MAVProxy (or any GCS) ships with or verifies the medical device, generate a separate SBOM from its own repository and Python environment.

8Licensing Overview

The main work is GNU GPL version 3 (see COPYING.txt). Third-party components retain their own licenses; there is no repository-wide exception that converts all embedded third-party code to GPLv3.

License scan configuration

  • File-level and nested-directory license discovery, not just a root LICENSE read.
  • Preserve per-file notices and scan nested LICENSE / COPYING files and the actual submodule repositories.
  • Expect a mix: GPLv3 first-party code; MIT (Lua), and mixed permissive/ LGPL-type terms in ChibiOS, lwIP, littlefs, CMSIS, gtest, gSOAP, and protocol libraries. Each needs an individual conclusion.

Why this matters for a medical device

  • GPLv3 distribution of modified firmware triggers corresponding-source obligations; "User Product" provisions can trigger installation-information obligations.
  • GPLv3 warranty and fitness disclaimers do not satisfy medical-device assurance obligations.
  • Whether higher-level proprietary software can remain separate from the firmware is a derivative-work and linkage question requiring legal review, not a scan result.

9Scan Module Configuration Checklist for the Provider

Enable the following modules and data sources when configuring the toolchain for this repository:

10Potentially Safety-Critical Components to Flag

The following areas should be treated as safety-relevant in the SBOM report's criticality column and in SOUP evaluation:

Scheduler / watchdog / bootloader Firmware update and signing path AHRS / EKF and navigation Attitude and position control Motor / servo output drivers Arming and failsafe logic Sensor drivers (IMU, GPS, baro, battery, rangefinder) Actuator and ESC drivers Parameter and persistent storage MAVLink / CAN / network command paths Lua scripts and runtime-selectable modules Logging and diagnostic integrity

Pill colors: red = flight-critical core, amber = input/output and command surface, green = evidence and diagnostics.

11FDA Submission Considerations

Scope of this analysis
ArduPilot is mature, widely deployed autopilot software, but it is not automatically medical-device qualified. Reusing it in a device makes it software of unknown provenance (SOUP) that the manufacturer must evaluate under its own quality system.
git submodule update --init --recursive
./waf list_boards | tr ' ' '\n' | sort -u | wc -l
find libraries/AP_HAL_ChibiOS/hwdef -name hwdef.dat | wc -l
cloc --exclude-dir=.git,build .

Report both "repository including submodules" and "first-party tree excluding submodules" component counts in the SBOM summary.