C ecosystem and systems architecture

Deep review current to 2026-09-03. The language baseline is C23, published as ISO/IEC 9899:2024; the ecosystem graph contains 50 components and 69 evidence-backed relationships. Read this beside the language deep dive and C reference.

C is not one stack. It is a small language abstract machine connected to a large set of external contracts: preprocessor state, compiler extensions, target ABI, object format, loader or reset path, C library, operating system, device registers, scheduling model, and project-specific safety rules. Its continuing value comes from making those seams inexpensive. Its continuing risk comes from making many of them implicit.

Scope and deep-review findings

This is an architecture review, not a ranking of compilers, kernels, RTOSes, or libraries. The graph selects components that reveal distinct interfaces and proof obligations. A real system will omit most of them, add vendor-specific pieces, and pin exact revisions; its job is to preserve the boundaries made visible here.

The ABI is C’s real network effect

Source compatibility matters, but the calling convention, object format, symbol model, layout rules, and stable C-shaped interfaces are what let kernels, runtimes, libraries, debuggers, assembly, and other languages compose independently.

Assembly is a contract, not an escape hatch

Out-of-line assembly, compiler intrinsics, and extended inline asm occupy different optimizer and tooling boundaries. Every path still owes the caller an ABI, accurate side-effect declarations, unwind behavior, and a tested fallback.

Linux is a configured product line

Kconfig selects a program; kbuild compiles C and assembly into ordered archives, vmlinux, modules, and an architecture boot product. A kernel diagram that omits configuration, context, lifetime, and generated code misses the system being shipped.

Real-time is end-to-end

An RTOS priority scheduler is one mechanism. Bounds must also cover ISR handoff, locks, allocation, protocol work, queue depth, stack use, DMA, cache effects, overload, watchdogs, and the control plant’s deadline.

High assurance is evidence, not syntax

MISRA and CERT rules reduce classes of mistake; FACE and MOSA shape replaceable interfaces; system-safety and airborne guidance demand traceable life-cycle evidence. None alone proves that compiled behavior is safe in its environment.

FFmpeg shows C at its best and hardest

A stable library decomposition connects hostile bitstreams, graph scheduling, reference-counted frames, threads, architecture dispatch, hand-tuned SIMD, and device APIs. Correctness must span both the portable C reference path and every optimized path.

Scope boundary. The defense and drone sections discuss public software architecture, safety engineering, modular interfaces, and verification. They do not provide weapon design, targeting, evasion, payload-integration, or operational employment instructions.

Back to top

History: from Unix tool to systems substrate

C emerged between 1969 and 1973 because the early Unix team needed a language above assembly that still fit a small machine and exposed its useful operations. BCPL’s and B’s word-oriented economy survived, while C acquired types and a compiler capable of expressing most of an operating system. The 1973 Unix rewrite was the decisive architectural demonstration: machine-dependent assembly could be concentrated at narrow edges rather than spread across the kernel. Source: The Development of the C Language.

1967BCPL1969B on early Unix1972C emerges1973Unix in C1978K&R C1989ANSI C1990ISO C90
Figure 1. The origin and first standardization era. Dates and descriptions come from Ritchie’s history and the WG14 project record.

K&R C spread through Unix ports before a formal standard fixed the language and library. ANSI C89 and ISO C90 converted practice into a portable contract. Later standards accumulated facilities without erasing installed dialects: C99 reshaped numeric and declaration practice; C11 introduced the language memory model and atomics; C17 consolidated corrections; C23 became the fifth ISO edition in October 2024. Linux, embedded vendors, and safety programs still select their own baselines because a standard’s publication and a deployed toolchain’s contract are different clocks.

1999C992011C112018C172024C23 published2025Memory-safety roadmaps2026C at the systems seam
Figure 2. Standards evolution and the current security pressure around memory-unsafe components. The final marker is this atlas snapshot, not a claim that the language stops evolving.
YearMilestoneArchitectural consequenceEvidence
1967BCPLA typeless systems language supplies the lineage from which B and C evolve.The Development of the C Language
1969B on early UnixThompson's B adapts the BCPL model to the PDP-7 environment used by early Unix.The Development of the C Language
1972C emergesRitchie's typed successor develops alongside Unix; 1972 is the most creative period.The Development of the C Language
1973Unix in CThe kernel rewrite demonstrates that a high-level systems language can retain access to machine facilities.The Development of the C Language
1978K&R CThe first edition of The C Programming Language becomes the de facto portable description.The Development of the C Language
1989ANSI CX3.159 standardizes prototypes, the library, preprocessing, and the language understood as C89.C project status and milestones
1990ISO C90ISO/IEC 9899:1990 internationalizes the ANSI language baseline.C project status and milestones
1999C99Adds inline functions, variable-length arrays, complex arithmetic, designated initializers, restrict, and a larger library.C project status and milestones
2011C11Adds atomics and a memory model, threads, generic selection, anonymous members, and optional bounds-checking interfaces.C project status and milestones
2018C17A defect-correction release consolidates the C11 line without a comparable feature wave.C project status and milestones
2024C23 publishedISO/IEC 9899:2024 becomes the fifth edition and the current C standard.ISO/IEC 9899:2024 — Programming languages — C; C project status and milestones
2025Memory-safety roadmapsGovernment guidance intensifies pressure to isolate or replace high-risk memory-unsafe components while acknowledging constrained legacy and low-level cases.Product Security Bad Practices; Memory Safe Languages: Reducing Vulnerabilities in Modern Software Development
2026C at the systems seamLinux 7.x, FFmpeg 9, RTOS, robotics, and avionics ecosystems still depend on C interfaces while adding safer-language and stronger-assurance boundaries.The Linux Kernel Archives; Download FFmpeg; Internal ROS 2 interfaces; FACE Technical Standard and corresponding documents

All 13 milestones in data/c-ecosystem.json. A milestone records a change in the language or its architectural role, not a usage ranking.

Back to top

One syntax, several contracts

The ISO standard defines the meaning of a conforming C program in an abstract machine and intentionally does not specify how it becomes an executable or is invoked. Every serious architecture therefore needs a contract stack: language edition, extension policy, compiler and flags, target triple, ABI, runtime or reset environment, library profile, link layout, concurrency model, and assurance rules.

ContractWhat it establishesWhat remains outside it
ISO C abstract machineExpressions, objects, types, translation, library and conformanceCalling convention, executable format, OS API, build graph, device behavior
Implementation + dialectExtension syntax, optimization, diagnostics, target support, inline asmCross-compiler identity unless the project tests and constrains it
Platform ABIRegister and stack use, type layout, symbols, relocations, dynamic linkingSource semantics or ownership/lifetime above a function boundary
POSIX / OS APIProcesses, files, threads, signals, clocks and other hosted servicesKernel-internal APIs, bare-metal behavior, hard real-time guarantees
Freestanding platformImplementation-defined startup and selected library facilitiesReset state, vector table, memory map, clocks, MMIO or board services
Project assurance profileAllowed subset, diagnostics, deviation process, evidence and review rulesWhole-system safety, security, temporal correctness, or fitness by itself

The contracts overlap in an implementation, but they answer different questions. Treating one as a proxy for another creates portability and assurance gaps. Sources: ISO/IEC 9899:2024 — Programming languages — C; POSIX.1-2024, The Open Group Base Specifications Issue 8; System V Application Binary Interface AMD64 Architecture Processor Supplement; MISRA C:2025 — Guidelines for the use of the C language in critical systems.

C23 is current, but “uses C23” is incomplete. Linux documents GNU C11; CMSIS describes a portable processor interface plus device-specific startup; a freestanding firmware may link only selected libc facilities; an airborne component may be constrained by project plans, tool qualification, and object-code evidence. The standard is the semantic floor, not the deployed architecture.

Back to top

Full ecosystem context map

The visual projects every component marked as part of the architectural spine. Lines are directional relationships; the relationship register preserves their type, meaning, and evidence. Secondary implementations and domain alternatives remain in the lossless register so the map can stay readable without pretending that C has one official distribution.

Standards &contractsSource &buildCompiler &binaryRuntime &assuranceKernel & lowlevelEmbedded &real timeRobotics &autonomyMedia &signal pathsISO C — C23 semanticsISO CC23 semanticsPOSIX — OS C APIPOSIXOS C APIPlatform ABI — calls + layoutPlatform ABIcalls + layoutAssurance rules — MISRA + CERTAssurancerulesSources + headers — .c + .h unitsSources +headersMake — dependency graphMakedependency graphCMake — build generatorCMakebuild generatorMeson + Ninja — fast buildsMeson +NinjaPreprocessor — tokens + macrosPreprocessortokens + macrosGCC — GNU compilerGCCGNU compilerClang / LLVM — LLVM toolchainClang / LLVMLLVM toolchainAssembler — .s/.S to objectAssembler.s/.S to objectglibc — GNU libcglibcGNU libcmusl — small libcmuslsmall libcEmbedded libc — newlib + picolibcEmbeddedlibcGDB / LLDB — source + machineGDB / LLDBsource + machineLinux kernel — GNU C11 coreLinux kernelGNU C11 coreKconfig + kbuild — select + assembleKconfig +kbuildKernel subsystems — VFS/net/mm/schedKernelsubsystemsDrivers + modules — hardware boundaryDrivers +modulesCMSIS — Arm core APIsCMSISArm core APIsBSP + startup + ISR — reset to mainBSP +startup +FreeRTOS — small RTOSFreeRTOSsmall RTOSZephyr — configured RTOSZephyrconfigured RTOSROS 2 rcl — C client coreROS 2 rclC client coreROS 2 rmw — middleware seamROS 2 rmwmiddleware seammicro-ROS rclc — deterministic Cmicro-ROSrclcPX4 — flight stackPX4flight stackFFmpeg tools — ffmpeg + ffprobeFFmpeg toolsffmpeg + ffprobelibavformat — demux + mux + I/Olibavformatdemux + mux + I/Olibavcodec — decode + encodelibavcodecdecode + encodelibavfilter — frame graphlibavfilterframe graph
Figure 3. 32 components and 38 relationships projected from c-ecosystem.json. Colour classifies layers, never maturity, safety, or rank. Replaceable choices are not endorsements.

The central path is source and headers through preprocessing, compilation, assembly, object files, linking, and loading or reset. The upper contracts constrain that path. The lower systems reuse it differently: Linux owns its libc-free privileged runtime; an RTOS owns scheduling but delegates board startup; ROS 2 exposes C APIs as language-neutral middleware seams; FFmpeg uses portable C as its reference and dispatch surface around assembly and device-specific acceleration.

Back to top

Source-to-silicon toolchain

Preprocess.c + .h → tokenstranslation unitCompiletokens → IRtyped IRCodegenIR → ISAinstructionsAssemble.s/.S → .orelocationsLink.o/.a → imageELF/PE/rawLoad/bootsegments → memory
Figure 4. The conceptual pipeline. A compiler driver may fuse stages, use an integrated assembler, or perform link-time optimization; the boxes are durable representation and responsibility boundaries, not a claim about process count. Sources: Using the GNU Compiler Collection; Clang documentation; Using as — GNU Assembler; LD — GNU Linker.
StageResponsibilityPrimary outputArchitecture question
PreprocessorIncludes headers; evaluates conditionals; expands macrosEffective source/token streamMacro configuration and include order are part of the program
C front endParses; resolves declarations/types; diagnoses constraintsAST and compiler IRAccepted extensions and warning policy define the dialect
OptimizerTransforms under the language and target semantic contractOptimized IRUndefined behavior may justify transformations surprising at source level
Back endSelects instructions; allocates registers; schedules codeAssembly or objectISA features, code model, relocation model and ABI are target inputs
AssemblerEncodes instructions/directives; creates sections and relocationsRelocatable objectTextual syntax is tool-specific; object semantics matter downstream
LinkerResolves symbols; selects archives; places sections; applies relocationsExecutable/module/imageArchive order, visibility, scripts, LTO, startup objects and libc are architecture
Loader / resetMaps segments and resolves dynamic symbols, or initializes firmware memoryRunning stateProcess ABI and firmware reset are different deployment models

Translation stages and the evidence each hands to the next. Reproducibility requires the complete command line, generated inputs, target data, linker script, startup objects, library choice, and tool versions—not only the compiler version.

make, CMake, and Meson occupy different levels. Make executes a file dependency graph. CMake and Meson model targets and usage requirements, then generate a native graph. pkg-config reports installed compile/link flags but does not fetch dependencies. Conan and vcpkg can acquire and build packages, but neither creates a universal C package identity: target ABI, compiler runtime, feature flags, patches, and link mode remain part of the resolved artifact.

Back to top

The C and assembly boundary

C does not standardize registers, stack frames, symbol spellings, object files, instruction selection, or inline assembly. Those belong to the compiler and target ABI. On x86-64, AArch64, and RISC-V the details differ, but the architecture question is constant: what state crosses the function boundary, what may be destroyed, how are values classified, where is the stack, and how are machine-visible side effects communicated to the compiler?

C declarationtypes, qualifiers, ownership convention, error contractCompiler contractextended-asm operands/clobbers or out-of-line function boundaryPlatform ABIargument/result classes, registers, stack, preserved state, alignmentObject contractsections, symbols, visibility, relocations, unwind and debug metadataISA + machineinstructions, privilege, memory ordering, vector state, device effects
Figure 5. Five simultaneous contracts at a C/assembly seam. The C prototype is necessary but cannot carry the whole machine contract. Sources: Extended Asm — Assembler Instructions with C Expression Operands; System V Application Binary Interface AMD64 Architecture Processor Supplement; Procedure Call Standard for the Arm 64-bit Architecture; RISC-V ELF psABI Document.
MechanismOptimizer relationshipPortability boundaryBest fit
Compiler intrinsic / builtinCompiler understands semantics and may optimize around itPortable only across implementations/targets that expose the intrinsicSingle operations and vector idioms
Extended inline asmC operands, constraints, outputs, clobbers and volatility describe an embedded templateThe compiler trusts that declaration; omitted effects are miscompilation risksShort sequences tied to nearby values
Out-of-line .s/.SA separately assembled symbol communicates through the platform ABIRequires manual register, stack, unwind, visibility and calling-contract disciplineEntry stubs, context switch, substantial kernels
Compiler-generated assemblyDiagnostic view of code generation, not normally a stable input contractOptimization and compiler versions may change it freelyInspection, performance review, object verification
Scalar C fallbackReference semantics and broad target coverageMay not express privileged operations or reach peak SIMD throughputCorrectness oracle and unsupported CPUs

Assembly integration choices. Prefer the highest-level mechanism that still expresses the required instruction and side effects; that preserves more compiler analysis and reduces handwritten ABI surface.

An inline asm volatile is not automatically a compiler memory barrier and is not automatically correct. Inputs, early-clobber outputs, condition codes, memory effects, register overlap, and control flow must match the template. Out-of-line routines move that contract into the platform ABI, which is often clearer for a substantial function and lets C, assembly, and tests evolve independently. Preprocessed .S files can share configuration and symbolic constants with C, but that also imports macro-state risk into assembly.

The robust pattern visible in kernels and FFmpeg is reference + dispatch + conformance test: retain a readable scalar C implementation, select an ISA-specific implementation only after capability checks, and compare optimized outputs and preserved state against the reference. Assembly then becomes a replaceable implementation of a small contract, not an invisible second language inside arbitrary expressions.

Back to top

Linux kernel architecture

At this snapshot kernel.org lists Linux 7.2.3 as stable and 7.3-rc1 as mainline. Those numbers date the ecosystem, but architecture lives in longer-lived boundaries. The kernel documentation still defines the C language as GNU C11, supports GCC and Clang/LLVM toolchains, and makes architecture code and build configuration first-class parts of the system. Sources: The Linux Kernel Archives; Programming Language; Building Linux with Clang/LLVM.

Kconfigsymbols → .configselected productPreparegenerated headerscontractskbuildobj-y / obj-mcompile graphC + asm.o + built-in.alink scriptLinkvmlinux + .koarch packagingPost-linkboot image
Figure 6. Kconfig and kbuild are part of the shipped kernel architecture. The top Makefile produces vmlinux and modules, while architecture rules supply flags, linker layout, post-processing, and the final boot image. Source: Linux Kernel Makefiles; Kconfig Language.
User/kernel boundarysyscalls, ioctls, netlink, filesystems, packets, eBPF program loadingCore subsystemsscheduler, memory management, VFS, networking, block, security, tracingDrivers and bus frameworksdevice model, PCI/USB/I2C/SPI/platform, DMA, interrupts, firmwareArchitecture codeentry, exceptions, atomics, barriers, page tables, context switch, alternativesHardwareCPUs, interrupt controllers, memory, buses, devices
Figure 7. Runtime responsibility layers. Real call graphs cross layers repeatedly; the stack shows ownership and abstraction direction, not a claim that fast paths are linear. Sources: Core API Documentation; The Linux driver implementer's API guide.
ConcernKernel contractReview consequence
DialectGNU C11 plus kernel-selected GNU extensions and attributes; Clang is supportedThe kernel is not an ISO-only or libc-hosted C program
ConfigurationKconfig produces .config and generated feature stateThe configured binary, not the repository, is the product under analysis
Buildkbuild selects built-in and module objects, archives them, links vmlinux, and creates boot productsLink order, generated code, host tools, architecture scripts, and post-link checks matter
Execution contextProcess, workqueue, softirq, hardirq, NMI, idle, stop-machine and other contexts differSleepability, preemption, stack, locking and allocation constraints are contextual
Memory orderingKernel primitives and the Linux Kernel Memory Model describe concurrency obligationsC11 atomics alone do not describe device MMIO, DMA, interrupt, or all kernel ordering
LifetimeReference counts, RCU, locking, device-managed resources, module ownership and teardown interactA pointer type does not prove that an object survives concurrent removal
Interface stabilityUser-space ABIs are maintained; internal interfaces evolve with the treeOut-of-tree modules inherit integration and forward-porting cost
Language boundaryRust support wraps selected C APIs through generated bindings and kernel abstractionsThe shared build, object, ABI and kernel concurrency model remain cross-language contracts

A kernel C review checklist organized by architecture rather than syntax. Every driver also needs its subsystem-specific locking, power-management, DMA, firmware, and teardown rules.

Kconfig and kbuild

Kconfig defines a product family; .config selects one member. kbuild combines top-level rules, an arch/$(SRCARCH)/Makefile, common scripts, and per-directory obj-y/obj-m declarations. It creates thin built-in.a archives, links the resident vmlinux, builds loadable .ko modules, and hands the result to architecture-specific boot-image processing. C source, preprocessed assembly, generated offsets, linker scripts, host tools, BTF/debug data, and post-link checks all participate; “compile the .c files” is not a kernel build model.

Contexts, subsystems, and drivers

Core code supplies shared abstractions; architecture code implements entry, exceptions, atomic primitives, barriers, memory translation, context switching, and alternatives; drivers bind device behavior to bus and subsystem contracts. A loadable module changes delivery, not privilege: it executes in the kernel address space. eBPF is different again—restricted instructions enter through a verifier and interpreter/JIT path with explicit helper and hook contracts.

The important UML-like relationship is not “driver inherits kernel.” It is a set of protocols over time: probe establishes resources, publication exposes the device, concurrent operations borrow state, quiesce stops new work, teardown waits for in-flight users, and removal releases resources in reverse dependency order. Lock order, RCU grace periods, reference ownership, interrupt disable state, work cancellation, and DMA completion are the real edges.

Back to top

Embedded and real-time architecture

In firmware, “runtime” is assembled rather than inherited. Reset code, a linker script, device startup, interrupt vectors, C library retargeting, board support, an optional RTOS, and the application together create the environment that a hosted C implementation normally supplies. CMSIS standardizes much of the Arm-facing vocabulary but intentionally leaves concrete devices and peripherals to vendor packs and board code.

Reset/ROMStartup asmC runtimeBoard/HALRTOSApplicationentry + initial machine statestack, .data copy, .bss clearclock, memory, vector, device inittick + interrupt + heap/stack policycreate tasks, queues, timerswait / notify / deadline
Figure 8. A common reset-to-task sequence. Exact reset state and initialization order are architecture, SoC, board, toolchain, and application contracts; the drawing exposes the handoffs that a test plan must cover. Sources: Using CMSIS in Embedded Applications; FreeRTOS kernel fundamentals.
DeploymentArchitecture shapePrimary tradeoff
Bare metalReset/startup → board initialization → superloop + ISR state machinesSmallest surface; application owns scheduling, time, concurrency, and all recovery
FreeRTOSPortable kernel + architecture port + application-selected heap and librariesSmall priority-based core; system architecture remains largely application-defined
ZephyrKconfig/devicetree/CMake product line + kernel + device model + servicesBroader integrated platform; generated configuration and bindings are central artifacts
RTEMSExecutive + Classic/POSIX APIs + CPU/BSP/driver layersStrong documentation and critical-system use; suitability remains an integrator decision
NuttXPOSIX-oriented RTOS + board/driver configuration, flat or protected deploymentsFamiliar interfaces on constrained targets; configuration and address-space mode alter isolation

Representative embedded execution models. Selection follows the product timing, isolation, connectivity, safety, update, footprint, and hardware-support requirements—not feature count.

Memory, interrupts, and devices

The linker script owns the physical image: vector table, executable text, read-only data, initialized data, zeroed storage, retained/no-init regions, stacks, heaps, shared memory, and sometimes overlays or tightly coupled memory. Startup code must realize that layout before ordinary C assumptions hold. An ISR and main/task context are concurrent even on one core; volatile describes accesses to volatile-qualified objects but is neither a lock nor a complete hardware ordering primitive. DMA adds another agent, with ownership, cache maintenance, alignment, and completion rules that belong in the component contract.

Real-time design

Analyze response time across interrupt latency, release jitter, priority, worst-case execution, blocking, preemption, cache and bus interference, message queues, driver work, and actuator deadlines. Ban or phase-limit allocation when fragmentation or failure cannot be bounded. Size each stack from measurement plus justified margin. Give overload an intentional outcome—drop, coalesce, degrade, shed, reset, or enter a safe state—rather than letting a full queue or missed watchdog choose one accidentally.

Back to top

Military, avionics, and high assurance

C’s defense and avionics use is less about the language being intrinsically safe than about the surrounding investment: long-supported processors, deterministic RTOSes, board support, analyzers, traceability systems, qualified or controlled toolchains, test equipment, interface standards, and staff able to review object-level behavior. The architecture must preserve that evidence without freezing every component behind one vendor.

System safetyhazards, severity, risk acceptance, safe states, environmental assumptionsSystem architecturepartitioning, authority, redundancy, open interfaces, timing and resource budgetsSoftware assuranceplans, requirements, traceability, reviews, verification, coverage, configurationC controlslanguage subset, deviations, static analysis, defensive APIs, compiler diagnosticsExecutable evidencequalified tools where required, object checks, target tests, integration and release identity
Figure 9. Assurance is an evidence chain descending from system hazards to the released binary. A coding-standard report appears in the fourth layer; it cannot stand in for the layers above or below. Sources: MIL-STD-882E Change 1 — System Safety; AC 20-115D — Airborne Software Development Assurance Using ED-12() and DO-178(); MISRA C:2025 — Guidelines for the use of the C language in critical systems; FACE Technical Standard and corresponding documents; Modular Open Systems Approach.
FrameworkArchitectural roleEvidence or decision it adds
MIL-STD-882EDoD system-safety process for eliminating hazards where possible and minimizing accepted riskHazard analyses, mitigations, verification, residual-risk acceptance across the life cycle
DO-178C via FAA AC 20-115DAirborne software development assurance as an accepted means of compliancePlans, objectives, traceability, verification, configuration, quality assurance, and tool considerations
MISRA C:2025Predictable critical-system C guidance and a managed deviation modelProject subset, analysis findings, justified deviations, enforcement and review evidence
SEI CERT CSecurity-oriented rules for recurring C weakness classesSecure-coding findings and remediation; it does not replace threat or system-safety analysis
FACE 3.2Portable airborne component architecture with defined segments and interfacesConformance scope and interface evidence; safety/security profiles do not certify an application automatically
DoD MOSAModular, loosely coupled, highly cohesive design around open, testable interfacesInterface ownership, conformance, data rights, substitution strategy, and sustainment plan

Public standards and guidance relevant to critical C systems. Applicability is contractual and domain-specific; this table is a system-design map, not compliance or certification advice.

Partitioning and open interfaces

FACE separates portable components from transport, operating-system, I/O, and platform services. MOSA makes modularity and open, verifiable interfaces a life-cycle acquisition strategy. For C, the interface still needs more than a header: binary versioning, data representation, timing, resource ceilings, initialization order, concurrency, failure containment, health reporting, update compatibility, security classification, and ownership of verification artifacts.

Source is not the final artifact

Optimization, undefined behavior, implementation-defined choices, generated code, link selection, libraries, startup, and post-link rewriting can separate reviewed source from executing bytes. Critical workflows therefore identify the exact compiler/linker configuration and released image, qualify or verify tools when their failure could remove required assurance, and close traceability through target integration. Whether disassembly or object-code verification is required is a project assessment—not something MISRA compliance decides.

Back to top

Robotics and deterministic middleware

ROS 2’s internal architecture makes C a deliberate language-neutral seam. rcl implements shared client behavior and graph concepts; rmw is the minimal interface to replaceable middleware; generated type support bridges message definitions to serialization. Language clients such as C++, Python, and rclc build above that C core rather than each binding directly to one DDS vendor.

Application nodessense, fuse, plan, control, diagnoserclc / language clientexecutor, wait set, node and entity conveniencercllanguage-neutral ROS graph and client semantics in Crmwreplaceable C middleware interfaceDDS / Zenoh / XRCE transportdiscovery, serialization, QoS, deliveryRTOS / POSIX + devicesthreads/tasks, clocks, network, sensors and actuators
Figure 10. The ROS 2 C seam from application execution down to middleware and the platform. Layers separate callback scheduling from transport QoS—two mechanisms that are often conflated in real-time designs. Sources: Internal ROS 2 interfaces; rclc — ROS client library in C; ROS 2 Executors.

The executor is an architectural scheduler. A middleware can retain messages and enforce delivery QoS, but it cannot bound an application callback or resolve priority inversion in shared resources. rclc’s executor exists precisely to give embedded C systems more control over callback order and trigger conditions. A hard real-time sense-plan-act chain should have explicit release conditions, bounded message memory, analyzed callback times, and isolated best-effort logging, visualization, discovery, and remote-service paths.

C is also the FFI layer under many non-C nodes and hardware SDKs. Treat that as a protocol: generated message structs need initialization/finalization; allocators must not cross ownership domains accidentally; QoS and type compatibility must be versioned; cancellation and shutdown must outlive callbacks; handles need clear thread affinity; and zero-copy loans require lifetime rules stronger than a raw pointer expresses.

Back to top

Drones and autonomous vehicles

PX4 makes the core decomposition explicit: middleware supplies hardware integration and communication; the flight stack supplies estimation and control. uORB is an asynchronous publish/subscribe bus inside the system; NuttX is the primary flight-controller RTOS; Linux commonly hosts richer companion software. ArduPilot uses a different codebase and hardware-abstraction structure but exposes the same architectural pressures: bounded control loops, portable device support, simulation, persistent parameters, and external vehicle protocols.

SensorsIMU/GNSS/barosamplesDriverssample + timestampobservationsEstimatorstate + covarianceestimated stateGuidancemode + setpointsetpointsControlrate/attitude/poscommandsActuationallocate + output
Figure 11. A flight-critical data path. Real systems contain feedback and multiple rates; the line shows the latency/authority chain that must remain bounded from sensor timestamp to physical output. Sources: PX4 Architectural Overview; uORB Messaging.
BoundaryResponsibilityDesign obligation
Flight controllerRTOS or constrained POSIX environment; drivers, estimator, navigation, control, actuatorsOwns stabilization and safe behavior when external links disappear
Internal busPX4 uORB or project-specific publish/subscribe and parameter servicesMessage definitions, timestamps, queue depth, update rates and startup ordering
Vehicle protocolMAVLink messages over serial, radio, UDP or other transportAuthentication/trust, command authority, replay/staleness, bandwidth and loss behavior
Companion computerLinux/ROS 2 perception, planning, payload, networking and high-level autonomyDegradable boundary; should not silently become a prerequisite for basic safe control
Ground stationConfiguration, mission planning, monitoring, logs and operator commandsHuman authority, state synchronization, link loss, unsafe parameters and update provenance
Simulation/HILSame modules or protocol surface connected to simulated plant and sensorsModel validity, timing fidelity, fault injection and exact configuration equivalence

Autonomous-vehicle system boundaries. The same architecture also applies to rovers, boats, and other robots; airworthiness, regulation, and operational constraints depend on the actual system and use.

Message passing improves replaceability but does not create safety by itself. Every control input needs a time basis, validity window, source/authority, coordinate frame, unit, range, and loss behavior. Queueing a stale setpoint preserves delivery while violating control intent. A companion link should have an explicit state machine: absent, discovered, healthy, degraded, rejected, and recovered, with the flight controller retaining the authority needed for its defined safe response.

Simulation should preserve build options, message schemas, scheduler assumptions, and parameter sets, then be complemented by software-in-the-loop, hardware-in-the-loop, bench, and controlled physical tests. Fault injection is most useful at named boundaries—sensor timeout, timestamp jump, queue overflow, estimator reset, actuator saturation, storage corruption, link loss—not as an undirected collection of random failures.

Back to top

FFmpeg and multimedia dataflow

FFmpeg 9.0.1 was the current stable release on this snapshot, with major-versioned libavutil 61, libavcodec/libavformat/libavdevice 63, libavfilter 12, libswscale 10, and libswresample 7. The command-line tools orchestrate those libraries; they are not a monolithic codec engine. Source: Download FFmpeg.

Demuxcontainer → packetAVPacketDecodepacket → frameAVFrameFilterframe graphAVFrameEncodeframe → packetAVPacketMuxpacket → container
Figure 12. The central packet/frame pipeline. Stream copy bypasses decode/filter/encode; live graphs may branch, synchronize multiple inputs, or use device-backed frames. The data-type boundary remains the useful starting point. Sources: FFmpeg Documentation; FFmpeg library modules.
LibraryResponsibilityBoundary to make explicit
libavutilFrames, buffers, pixel/sample formats, time bases, dictionaries and common utilitiesShared data model and reference-counted ownership below the other libraries
libavformatProtocols, I/O, demuxers and muxersContainer timestamps and compressed packet streams
libavcodecDecoders, encoders, parsers, bitstream filters and hardware contextsHostile coded data, codec state, threads and packet/frame conversion
libavfilterNegotiated graph of audio/video sources, transforms and sinksFormat negotiation, frame scheduling, backpressure, latency and reconfiguration
libswscaleVideo size, pixel-format and color conversionStrides, planes, color metadata and rounding
libswresampleAudio sample-format conversion, resampling and mixingChannel layouts, delay and rate drift
libavdeviceCapture and playback device integrationBlocking behavior, clocks and platform device APIs

The main FFmpeg library decomposition. Public APIs and major library versions are the integration surface; internal structures and optimized functions are not equivalent compatibility promises.

Assembly, dispatch, and hardware frames

Codec and transform hot paths often dispatch from C to x86, Arm, AArch64, or other ISA-specific functions. FFmpeg’s checkasm framework compares optimized implementations with reference behavior and can check calling-convention preservation. That is the right relationship: C defines the callable surface and scalar oracle; the build selects ISA objects; runtime detection selects a supported path; tests establish equivalence.

Hardware acceleration adds a second memory domain. Decode may produce a device frame that filters or encoders can reuse without download, but format negotiation, device/context lifetime, synchronization, pool exhaustion, fallback, and error recovery become graph properties. “Zero copy” means an avoided transfer along one path, not the absence of ownership or synchronization.

Untrusted media and temporal correctness

Demuxers and decoders parse adversarial lengths, offsets, tables, recursion, entropy-coded state, and container relationships. Checked arithmetic, allocation ceilings, fuzzing, sanitizers, regression vectors, and minimal enabled surfaces complement review. Temporal correctness is separate: preserve explicit time bases, distinguish decode and presentation order, rescale deliberately, and define discontinuity, drift, buffering, and backpressure behavior at every live boundary.

Back to top

Use-case architecture register

The same language participates in very different systems. The table makes the deployment contract and design boundary primary; the component list is representative. It should help an architecture review ask “which C? in which protection domain? under which scheduler and ABI?” before discussing local syntax.

DomainRepresentative componentsWhy C fitsBoundary to design explicitlySources
Hosted native softwareISO C, POSIX, CMake, Meson + Ninja, pkg-config, Dependency managers, GCC, Clang / LLVM, MSVC, glibc, musl, GDB / LLDB, Sanitizers, Static analysisC supplies a stable source and binary interface, direct OS access, predictable data layout, and extensive mature libraries for tools, runtimes, databases, interpreters, and performance-sensitive components.Select the language dialect, supported ABIs, libc and deployment baseline, ownership rules, dependency provenance, error model, concurrency model, and memory-safety mitigation plan.ISO/IEC 9899:2024 — Programming languages — C; POSIX.1-2024, The Open Group Base Specifications Issue 8; Product Security Bad Practices
Linux kernel and driversLinux kernel, Kconfig + kbuild, Kernel subsystems, Drivers + modules, eBPF, GCC, Clang / LLVM, Assembler, Linker, ELF / COFF, QEMUGNU C extensions, explicit layout, intrinsics and assembly interoperation fit privileged code that must express hardware operations, concurrency, cache behavior, and architecture-specific fast paths.Kernel APIs are internal contracts, not a stable general in-kernel ABI. Record context rules, locking, lifetime, allocation mode, user-copy validation, DMA ownership, barriers, configuration reachability, and C/Rust/assembly seams.Programming Language; Linux Kernel Makefiles; Core API Documentation; The Linux driver implementer's API guide
Bare-metal firmwareCMSIS, BSP + startup + ISR, Embedded libc, GCC, Clang / LLVM, Assembler, Linker, ELF / COFF, GDB / LLDB, Static analysisFreestanding C can map fixed registers, interrupt vectors, memory sections, and startup state without requiring an operating system or managed runtime.Make the memory map, initialization order, clock tree, interrupt priorities, stack/heap budgets, MMIO volatility, concurrency with ISRs/DMA, update/rollback path, and reset/fault behavior explicit.ISO/IEC 9899:2024 — Programming languages — C; CMSIS Introduction; Using CMSIS in Embedded Applications; Linker Scripts
RTOS and real-time controlFreeRTOS, Zephyr, RTEMS, NuttX, CMSIS, BSP + startup + ISR, Embedded libc, GDB / LLDB, QEMUC is the common API and porting layer for schedulers, interrupt-safe primitives, drivers, protocol stacks, and deterministic control tasks across constrained processors.Analyze worst-case execution and blocking, task and ISR priorities, queue capacity, stack watermarks, allocation policy, clock/time bases, priority inversion, watchdog coverage, and overload behavior.FreeRTOS kernel fundamentals; Zephyr Project Documentation; RTEMS Documentation; Apache NuttX Documentation
Defense, avionics, and high assuranceAssurance rules, FACE, DoD MOSA, RTEMS, BSP + startup + ISR, Static analysis, GDB / LLDB, Platform ABIC remains common in long-lived real-time and avionics platforms because toolchains, analyzers, qualified processes, board support, and binary interfaces are deeply established.A language subset is one control, not the safety case. Trace hazards to requirements and tests; govern tool qualification, object-code verification, partitioning, open interfaces, configuration data, deviations, provenance, and sustainment evidence.MIL-STD-882E Change 1 — System Safety; AC 20-115D — Airborne Software Development Assurance Using ED-12() and DO-178(); FACE Technical Standard and corresponding documents; Modular Open Systems Approach; MISRA C:2025 — Guidelines for the use of the C language in critical systems
Robotics middlewareROS 2 rcl, ROS 2 rmw, micro-ROS rclc, FreeRTOS, Zephyr, POSIX, Sanitizers, Static analysisC forms a language-neutral middleware seam and supports small deterministic clients that connect microcontrollers to a broader ROS 2 graph.Separate transport QoS from executor scheduling; budget callbacks and queues; own message memory; handle discovery loss and stale data; isolate hard real-time loops from best-effort perception and logging paths.Internal ROS 2 interfaces; rclc — ROS client library in C; ROS 2 Executors
Drones and autonomous vehiclesPX4, ArduPilot, MAVLink, NuttX, ROS 2 rcl, ROS 2 rmw, QEMU, BSP + startup + ISRC and adjacent C++ code integrate sensor drivers, estimation and control loops, real-time scheduling, generated messaging, simulation, and constrained flight-controller hardware.Keep safety-critical flight control, navigation, communications, payload, and companion-computer concerns partitioned. Define authority, arming/failsafe states, timing, stale-data behavior, protocol trust, simulation equivalence, and hardware-in-the-loop evidence.PX4 Architectural Overview; uORB Messaging; Learning ArduPilot — Introduction; MAVLink Developer Guide
FFmpeg and multimediaFFmpeg tools, libavformat, libavcodec, libavfilter, Utility + conversion libs, SIMD assembly, Hardware acceleration, GCC, Clang / LLVM, Assembler, SanitizersC's ABI reach, explicit buffers and strides, vectorizable loops, portable fallbacks, and assembly interoperability fit high-throughput codecs and cross-platform media pipelines.Model packets versus frames, timestamps and time bases, ownership/reference counts, negotiated formats, thread safety, untrusted bitstreams, filter backpressure, device-frame transfers, CPU dispatch, and scalar fallback coverage.Download FFmpeg; FFmpeg library modules; FFmpeg Developer Documentation; FFmpeg Hardware Acceleration
C and assembly interoperabilityPlatform ABI, GCC, Clang / LLVM, Assembler, Linker, ELF / COFF, BSP + startup + ISR, SIMD assembly, GDB / LLDBC supplies structured control and portable fallbacks while assembly supplies reset/entry paths, privileged instructions, atomics, context switches, exact instruction sequences, and measured SIMD kernels.The contract is the ABI plus compiler constraints: declare inputs, outputs, clobbers and memory effects; preserve registers and stack alignment; expose symbols deliberately; avoid assuming source order; test every ISA variant against a reference path.Extended Asm — Assembler Instructions with C Expression Operands; Using as — GNU Assembler; System V Application Binary Interface AMD64 Architecture Processor Supplement; Procedure Call Standard for the Arm 64-bit Architecture; RISC-V ELF psABI Document; checkasm — for all your assembly checking needs

9 domain projections derived from c-ecosystem.json. Components recur because compiler, ABI, debugging, and assurance surfaces cut across application categories.

Back to top

Memory safety and trust boundaries

Current CISA/FBI guidance calls developing new product lines in memory-safe languages the preferred direction and asks existing products to prioritize memory-safety roadmaps. NSA/CISA guidance also recognizes incremental adoption and interoperability rather than assuming every installed C system can be rewritten at once. For a C architecture, that creates a concrete obligation: identify high-risk components, shrink unsafe surfaces, place memory-safe components where practical, and make the remaining C case measurable and time-bounded. Sources: Product Security Bad Practices; Memory Safe Languages: Reducing Vulnerabilities in Modern Software Development.

BoundaryWhat crosses itMechanism can establishIt does not establish alone
Source / preprocessorHeaders, macros, generated files, feature selectionReproducible generation and include graphSemantic review of every selected expansion
Compiler optimizationC abstract-machine assumptions become target transformationsDiagnostics and instrumented buildsDefined behavior or equivalence of untested optimization paths
LinkObjects, archives, LTO, scripts, startup and libraries become one imageSymbol/layout maps and reproducible inputsCorrect initialization, ABI ownership, or dead-code safety
Raw pointer / bufferAddress, extent, alignment, lifetime, provenance and mutabilityNothing beyond what code and tools establishBounds, lifetime, race freedom, initialization
C / assemblyValues and state cross compiler and hand-written instruction domainsABI plus declared operands/clobbersSemantic equivalence, unwindability, or sanitizer visibility
Kernel / userUntrusted pointers, lengths, commands, packets and shared mappingsProtection and explicit copy/validation APIsSemantic validity or race-free teardown
ISR / DMA / taskConcurrent hardware and software agents share memory and devicesPlatform primitives and driver protocolOrdering, ownership, cache coherence, deadlines
Protocol / media inputAdversarial structured bytes, timestamps and state transitionsParser checks and resource budgetsBenign complexity, finite work, or trusted metadata
Dependency / toolThird-party source and build-time executables enter the productPinned identity, hashes/signatures, SBOMMaintainer intent, absence of malicious logic, fitness

Trust boundaries across the C life cycle. Compiler hardening, sanitizers, static analysis, fuzzing, MPU/MMU isolation, capability hardware, process separation, coding rules, and review are complementary controls.

A useful memory-safety roadmap classifies by exposure and authority: network/media parsers, privileged code, cryptographic and identity components, update paths, and cross-domain brokers normally deserve priority. At each seam, use length-carrying APIs, checked arithmetic, explicit ownership, opaque state, narrow privileges, bounded resource use, process or hardware isolation where available, and differential tests between old and new paths.

C can be engineered responsibly, but not by implication. A clean sanitizer run covers only executed, instrumented paths; a static analyzer covers only its model; MISRA or CERT compliance covers defined rules; an MPU covers configured regions; testing covers selected states. The safety argument names how those claims compose and where they stop.

Back to top

Architecture decision guide

DecisionStarting positionTradeoff to recordSources
Which C contract is the project actually using?Name an ISO baseline and every required extension, platform API, ABI, and freestanding or hosted assumption in the build configuration.A newer standard adds facilities but does not replace kernel dialects, vendor extensions, compiler support matrices, or certification baselines.ISO/IEC 9899:2024 — Programming languages — C; Programming Language
Which components still justify memory-unsafe C?Keep C where hardware, ABI, timing, footprint, qualified tooling, or installed-base constraints are real; prefer memory-safe languages for new higher-level components and isolate the seam.Migration cost is real, but sanitizers and coding rules mitigate rather than eliminate spatial, temporal, and concurrency memory hazards.Product Security Bad Practices; Memory Safe Languages: Reducing Vulnerabilities in Modern Software Development
What crosses the binary boundary?Use fixed-width or explicitly versioned types, clear ownership, opaque handles, explicit error values, symbol visibility policy, and ABI tests for every supported target.Exposing compiler-dependent layout, bit-fields, variadics, inline functions, allocator ownership, or long-lived structs makes independent evolution expensive.System V Application Binary Interface AMD64 Architecture Processor Supplement; Procedure Call Standard for the Arm 64-bit Architecture; RISC-V ELF psABI Document
Where should assembly live?Prefer compiler intrinsics or isolated out-of-line .S routines behind a C reference implementation; use extended inline asm only when its operand and clobber contract is the right abstraction.Assembly buys exact instructions and access to privileged or vector features, but multiplies ISA, ABI, optimizer, unwind, sanitizer, and test obligations.Extended Asm — Assembler Instructions with C Expression Operands; Using as — GNU Assembler; checkasm — for all your assembly checking needs
What execution context owns this kernel code?Document process, softirq, hardirq, NMI, workqueue, or atomic context together with sleepability, lifetime, locking, user-copy, and allocation constraints.A function signature alone cannot express kernel context; hidden context coupling produces deadlocks, use-after-free, priority inversions, and invalid blocking.Core API Documentation; The Linux driver implementer's API guide
What is the real-time scheduling and memory policy?Define priorities, periods/deadlines, bounded queues, allocation phases, ISR handoff, maximum blocking, stack budgets, watchdog response, and overload shedding before selecting APIs.An RTOS provides mechanisms, not schedulability; dynamic allocation, logging, unbounded protocol work, and shared locks can invalidate the timing case.FreeRTOS kernel fundamentals; ROS 2 Executors; RTEMS Documentation
What evidence makes critical C acceptable?Trace system hazards and requirements to architecture, code, analysis, tests, coverage, configuration, tool evidence, deviations, binary/object checks, and controlled release artifacts.MISRA or CERT findings are inputs to an assurance case, not a certificate that the system is safe, secure, temporally correct, or fit for its operational environment.MIL-STD-882E Change 1 — System Safety; AC 20-115D — Airborne Software Development Assurance Using ED-12() and DO-178(); MISRA C:2025 — Guidelines for the use of the C language in critical systems; SEI CERT C Coding Standard
Where is determinism enforced in a robotics graph?Keep the bounded sense-plan-act path on an analyzed executor/task schedule and bridge asynchronously to discovery, visualization, logging, and best-effort services.Middleware QoS can bound transport behavior but cannot by itself bound callback execution, shared-resource contention, or end-to-end control latency.ROS 2 Executors; rclc — ROS client library in C; Internal ROS 2 interfaces
How are flight-critical and mission functions partitioned?Keep estimator/control/actuation authority on the flight controller; treat companion computers, payloads, radio links, and ground stations as explicit, degradable trust boundaries.A richer companion platform accelerates development, but timing, link loss, command authority, stale data, and recovery behavior must remain safe without it.PX4 Architectural Overview; MAVLink Developer Guide; Modular Open Systems Approach
Where are FFmpeg's packet, frame, and device boundaries?Draw the demux-decode-filter-encode-mux graph with time bases, negotiated formats, buffer ownership, thread boundaries, and hardware upload/download edges.Zero-copy and hardware paths reduce movement but couple device formats and lifetimes; portable scalar and software paths remain essential for correctness and coverage.FFmpeg library modules; Libavformat Documentation; FFmpeg Hardware Acceleration
How are native dependencies reproduced and audited?Pin source identity and revisions, preserve checksums or signatures, record build options and patches, generate an SBOM, and rebuild in a controlled toolchain environment.System packages, vendoring, submodules, Conan, and vcpkg shift who owns updates and ABI compatibility; no mechanism establishes maintainer trust by itself.Conan 2 documentation; vcpkg documentation; Guide to pkg-config

11 review prompts stored in the ecosystem graph. They are starting positions, not universal prescriptions; a measured constraint or applicable assurance process can change the answer.

A complete C architecture decision record names at least: language/dialect and extensions; target ABIs and endianness/data models; compiler, linker, startup and libc; build and dependency provenance; address spaces and privilege; buffer ownership; concurrency contexts; allocation policy; error/fault/reset behavior; assembly and generated-code seams; supported hardware; analysis/test matrix; update compatibility; and the exact released binary identity. If one of those is “whatever the toolchain does,” that is still a decision—just an unstable one.

Back to top

Component and relationship register

This is the lossless text form of the visual map. Stable IDs are graph keys; names are labels. The build rejects duplicate IDs, dangling relationship endpoints, unknown layers/statuses/relation kinds, self-edges, uncited assertions, unused sources, invalid snapshot dates, and non-chronological milestones before rendering.

Components

Stable IDComponentLayerStatusResponsibilityEvidence
iso-cISO CStandards & contractsstandardDefines the abstract machine, translation units, types, expressions, library surface, conformance, and portability boundaries; it does not define a platform ABI or build system.ISO/IEC 9899:2024 — Programming languages — C; C project status and milestones
posixPOSIXStandards & contractsstandardAdds portable operating-system interfaces such as processes, files, threads, signals, and sockets around the ISO C base on conforming systems.POSIX.1-2024, The Open Group Base Specifications Issue 8
platform-abiPlatform ABIStandards & contractsstandardFixes calling convention, register use, data layout, stack rules, object-file conventions, relocations, and dynamic-linking contracts for a target platform.System V Application Binary Interface AMD64 Architecture Processor Supplement; Procedure Call Standard for the Arm 64-bit Architecture; RISC-V ELF psABI Document
assurance-rulesAssurance rulesStandards & contractsstandardRestricts or disciplines C for predictable, safe, secure, and reviewable code; compliance requires process, evidence, and controlled deviations, not only a linter switch.MISRA C:2025 — Guidelines for the use of the C language in critical systems; SEI CERT C Coding Standard
faceFACEStandards & contractsstandardDefines architectural segments and interfaces for portable airborne software components across general-purpose, safety, and security profiles.FACE Technical Standard and corresponding documents
mosaDoD MOSAStandards & contractsstandardFrames modular, loosely coupled defense-system architectures around open interfaces, replaceable components, conformance, and life-cycle sustainment.Modular Open Systems Approach
source-headersSources + headersSource & buildproject-codeOrganizes declarations and definitions into translation units; textual inclusion makes header ownership, macro state, feature-test macros, and include order architectural concerns.ISO/IEC 9899:2024 — Programming languages — C
makeMakeSource & buildbuild-toolExpresses file-oriented targets, prerequisites, recipes, and incremental rebuild rules; many systems expose or build a higher-level generator above it.GNU Make Manual
cmakeCMakeSource & buildbuild-toolModels targets, usage requirements, tests, installation, and export metadata, then generates native build-system inputs for multiple platforms.CMake Documentation
mesonMeson + NinjaSource & buildbuild-toolProvides a declarative project model commonly executed by Ninja, with explicit cross files and dependency objects for native and cross builds.The Meson Build System; Ninja Manual
pkg-configpkg-configSource & buildbuild-toolPublishes compiler and linker metadata for installed libraries through .pc files; it describes an installation but does not resolve or fetch source packages.Guide to pkg-config
dependency-managerDependency managersSource & buildcommunity-choiceAcquires and builds versioned native dependencies and integrates them with build systems; system packages, vendoring, submodules, Conan, and vcpkg imply different provenance contracts.Conan 2 documentation; vcpkg documentation
preprocessorPreprocessorCompiler & binaryofficial-toolPerforms inclusion, conditional selection, and macro replacement before the C front end; generated tokens and configuration choices form the effective program.The C Preprocessor
gccGCCCompiler & binaryimplementationImplements ISO and GNU C dialects, target code generation, optimization, LTO, inline assembly constraints, diagnostics, and a compiler-driver interface to assembler and linker.Using the GNU Compiler Collection; Extended Asm — Assembler Instructions with C Expression Operands
clang-llvmClang / LLVMCompiler & binaryimplementationSupplies a C front end, LLVM IR pipeline, target backends, LTO, integrated assembler options, diagnostics, and an alternative full toolchain for Linux and other platforms.Clang documentation; Building Linux with Clang/LLVM
assemblerAssemblerCompiler & binaryofficial-toolEncodes instructions, directives, sections, symbols, and relocations into target object files from compiler output or hand-written assembly.Using as — GNU Assembler
msvcMSVCCompiler & binaryimplementationImplements Microsoft's C dialect and Windows compiler, linker, object, debug, and runtime conventions; portability must separate ISO behavior from platform contracts.C language reference
linkerLinkerCompiler & binaryofficial-toolResolves symbols and relocations, selects archive members, lays out sections, applies linker scripts, and emits executables, shared objects, modules, or firmware images.LD — GNU Linker; Linker Scripts
object-formatELF / COFFCompiler & binaryexternal-boundaryCarries sections, symbols, relocations, visibility, debug information, and loader metadata between compilers, assemblers, linkers, loaders, debuggers, and analysis tools.System V ABI — Generic ABI; PE Format
glibcglibcRuntime & assuranceimplementationProvides the ISO C and POSIX-facing user-space runtime on GNU systems, including startup, allocation, threads, dynamic linking integration, locale, I/O, and system-call wrappers.The GNU C Library Reference Manual
muslmuslRuntime & assuranceimplementationImplements a compact Linux libc with strong static-linking support and standards-oriented interfaces, representing a different compatibility and deployment tradeoff from glibc.About musl
embedded-libcEmbedded libcRuntime & assuranceimplementationSupplies freestanding and bare-metal C library pieces that are retargeted to board I/O, allocation, process, and termination hooks rather than assuming a hosted Unix process.The Newlib Homepage; Picolibc C library for embedded systems
debuggersGDB / LLDBRuntime & assuranceanalysis-toolCorrelates machine state and debug information with C source, supports breakpoints and unwinding, and often reaches remote embedded targets through a debug server.Debugging with GDB; LLDB documentation
sanitizersSanitizersRuntime & assuranceanalysis-toolInstruments selected undefined behavior, memory access, data race, leak, and control-flow properties in test builds; coverage and platform support vary and absence of a finding is not proof.AddressSanitizer; UndefinedBehaviorSanitizer
static-analysisStatic analysisRuntime & assuranceanalysis-toolChecks paths, data flow, API contracts, and coding-rule subsets without executing the program; project modeling and deviation handling determine useful coverage.Clang Static Analyzer; SEI CERT C Coding Standard
linux-kernelLinux kernelKernel & low levelplatformRuns privileged core services and hardware management. The current documentation specifies GNU C11 for C code, alongside supported Rust, and no user-space libc is available inside the kernel.The Linux Kernel Archives; Programming Language
kconfig-kbuildKconfig + kbuildKernel & low levelbuild-toolTurns configuration symbols, architecture rules, generated headers, C and assembly objects, archives, linker scripts, and post-link steps into vmlinux, modules, and boot images.Linux Kernel Makefiles; Kconfig Language
kernel-subsystemsKernel subsystemsKernel & low levelproject-codeProvides scheduler, memory management, VFS, networking, block, security, synchronization, and other shared internal contracts above architecture-specific primitives.Core API Documentation
drivers-modulesDrivers + modulesKernel & low levelproject-codeBinds buses and devices to kernel subsystem interfaces; code may be built in or loaded as a module but remains in the kernel protection domain.The Linux driver implementer's API guide; Building External Modules
ebpfeBPFKernel & low levelplatformLoads restricted programs through a verifier and JIT/interpreter path for tracing, networking, and security hooks; its instruction and helper contracts differ from native C even when source is written in C.BPF Documentation
qemuQEMUKernel & low levelanalysis-toolEmulates complete machines or user-mode targets for cross-platform bring-up, kernel and firmware testing, debugging, and CI before or alongside hardware-in-the-loop.System Emulation Introduction
cmsisCMSISEmbedded & real timestandardStandardizes processor-core access, device support, driver and RTOS interfaces, DSP/NN libraries, debug access, and pack-based delivery across Arm microcontrollers.CMSIS Introduction
bsp-startup-isrBSP + startup + ISREmbedded & real timeproject-codeOwns reset entry, vector tables, clocks, memory initialization, linker layout, interrupt handlers, peripheral access, and the board-specific seam between C and assembly.Using CMSIS in Embedded Applications; Linker Scripts
freertosFreeRTOSEmbedded & real timeplatformProvides a priority scheduler, tasks, queues, notifications, semaphores, timers, memory-allocation choices, and portable architecture layers for constrained microcontrollers.FreeRTOS kernel fundamentals
zephyrZephyrEmbedded & real timeplatformCombines an RTOS kernel, device-driver model, devicetree, Kconfig, CMake/west builds, networking, security, and safety-oriented project processes across many boards.Zephyr Project Documentation; Devicetree access from C/C++
rtemsRTEMSEmbedded & real timeplatformProvides a real-time executive with Classic and POSIX APIs, BSP and driver layers, multiprocessor support, and documented engineering artifacts for critical systems.RTEMS Documentation
nuttxNuttXEmbedded & real timeplatformProvides a small POSIX-oriented RTOS, board and driver model, configuration system, and protected or flat build modes; it is PX4's primary flight-controller RTOS.Apache NuttX Documentation; PX4 Architectural Overview
ros2-rclROS 2 rclRobotics & autonomyofficial-libraryProvides the public C client-library core used by language-specific clients, while remaining independent of a concrete middleware implementation.Internal ROS 2 interfaces
ros2-rmwROS 2 rmwRobotics & autonomyofficial-libraryDefines a C interface between ROS client libraries and replaceable DDS, RTPS, Zenoh, or other middleware implementations.Internal ROS 2 interfaces
micro-ros-rclcmicro-ROS rclcRobotics & autonomydomain-projectAdds a C convenience and executor layer for resource-constrained robotics, including controlled callback ordering and trigger conditions for real-time patterns.rclc — ROS client library in C; ROS 2 Executors
px4PX4Robotics & autonomydomain-projectStructures an autonomous vehicle as drivers, uORB messaging, estimation, control, navigation, communication, and actuator paths over NuttX or POSIX platforms.PX4 Architectural Overview; uORB Messaging
ardupilotArduPilotRobotics & autonomydomain-projectImplements vehicle applications over shared libraries and a hardware abstraction layer, targeting embedded boards and simulation environments.Learning ArduPilot — Introduction
mavlinkMAVLinkRobotics & autonomystandardDefines compact messages and generated C interfaces across flight controllers, companion computers, payloads, and ground stations; transport and system safety remain separate concerns.MAVLink Developer Guide
ffmpegFFmpeg toolsMedia & signal pathsdomain-projectProvides command-line orchestration for ingest, probing, decode, filter, encode, mux, streaming, device I/O, and hardware acceleration over the FFmpeg libraries.Download FFmpeg; FFmpeg Documentation
libavformatlibavformatMedia & signal pathsofficial-libraryMaps protocols and container formats to timestamped compressed packets and writes packets back to containers or streams.FFmpeg library modules; Libavformat Documentation
libavcodeclibavcodecMedia & signal pathsofficial-libraryTransforms compressed packets and coded data into decoded frames, or frames into encoded packets, while exposing codec capabilities and hardware contexts.FFmpeg library modules
libavfilterlibavfilterMedia & signal pathsofficial-libraryBuilds graph-based audio and video frame transformations with explicit pads, links, negotiation, scheduling, and source/sink boundaries.FFmpeg library modules
libavutil-convertUtility + conversion libsMedia & signal pathsofficial-libraryProvides common frames, buffers, pixel and sample metadata plus video scaling/color conversion and audio resampling/mixing services.FFmpeg library modules
optimized-dspSIMD assemblyMedia & signal pathsproject-codeImplements measured codec, transform, pixel, and audio kernels in target intrinsics or assembly behind runtime CPU dispatch and scalar C fallbacks.checkasm — for all your assembly checking needs; FFmpeg Developer Documentation
hardware-accelHardware accelerationMedia & signal pathsexternal-boundaryMoves selected decode, encode, mapping, or filtering work through platform APIs and device surfaces, introducing format, lifetime, synchronization, and fallback boundaries.FFmpeg Hardware Acceleration

All 50 components in data/c-ecosystem.json. Status distinguishes standards, tools, implementations, project code, domain projects, and external boundaries; it is not a maturity score.

Relationships

Stable IDFromRelationToMeaningEvidence
c-specifies-sourceISO CspecifiesSources + headersdefines translation units, declarations, definitions, preprocessing tokens, and library contractsISO/IEC 9899:2024 — Programming languages — C
posix-extends-cPOSIXextendsISO Cadopts the C language and library while adding operating-system interfacesPOSIX.1-2024, The Open Group Base Specifications Issue 8
abi-constrains-codegenPlatform ABIconfiguresGCCconstrains target calling convention, layout, symbols, and relocation behaviorSystem V Application Binary Interface AMD64 Architecture Processor Supplement; Procedure Call Standard for the Arm 64-bit Architecture; RISC-V ELF psABI Document
assurance-constrains-sourceAssurance ruleschecksSources + headersrestricts risky constructs and requires documented project rules and deviationsMISRA C:2025 — Guidelines for the use of the C language in critical systems; SEI CERT C Coding Standard
face-applies-posixFACEdepends-onPOSIXuses selected operating-system and language interfaces within architectural profilesFACE Technical Standard and corresponding documents
mosa-frames-faceDoD MOSAintegrates-withFACEuses standards-based severable interfaces as a defense modularity mechanismModular Open Systems Approach; FACE Technical Standard and corresponding documents
make-builds-sourceMakebuildsSources + headersmodels prerequisites and recipes for translation-unit outputsGNU Make Manual
cmake-generates-makeCMakegeneratesMakecan generate native Makefile build graphsCMake Documentation
meson-generates-ninjaMeson + NinjabuildsSources + headersgenerates and executes a target graph, commonly through NinjaThe Meson Build System; Ninja Manual
pkgconfig-feeds-buildpkg-configconfiguresCMakesupplies installed dependency compiler and linker metadataGuide to pkg-config; CMake Documentation
dependency-feeds-buildDependency managersintegrates-withCMakeacquires native dependencies and exports build-system integrationConan 2 documentation; vcpkg documentation
source-enters-cppSources + headerspreprocessesPreprocessorfeeds source files, included headers, macro state, and conditional configurationISO/IEC 9899:2024 — Programming languages — C; The C Preprocessor
cpp-feeds-gccPreprocessorinvokesGCCproduces the token stream parsed and analyzed by the GNU C front endThe C Preprocessor; Using the GNU Compiler Collection
cpp-feeds-clangPreprocessorinvokesClang / LLVMproduces the token stream parsed and lowered by ClangClang documentation
gcc-emits-assemblyGCClowers-toAssembleremits target instructions as assembly text or integrated assembler inputUsing the GNU Compiler Collection; Using as — GNU Assembler
clang-emits-objectClang / LLVMlowers-toAssemblerlowers LLVM IR to target instructions and object representationClang documentation
msvc-emits-objectMSVCproducesELF / COFFemits Windows COFF objects and debug information under Microsoft target contractsC language reference; PE Format
assembler-emits-objectAssemblerproducesELF / COFFencodes sections, symbols, instructions, and relocationsUsing as — GNU Assembler; System V ABI — Generic ABI
object-enters-linkerELF / COFFlinksLinkersupplies relocatable objects, archives, shared objects, symbols, and metadataLD — GNU Linker; System V ABI — Generic ABI
linker-emits-imageLinkerproducesELF / COFFemits a linked executable, shared object, module, or firmware imageLD — GNU Linker; Linker Scripts
glibc-implements-c-posixglibcimplementsPOSIXimplements ISO C and POSIX-facing user-space facilities on GNU systemsThe GNU C Library Reference Manual; POSIX.1-2024, The Open Group Base Specifications Issue 8
musl-implements-c-posixmuslimplementsPOSIXimplements ISO C and POSIX interfaces for Linux with a different deployment contractAbout musl
embedded-libc-implements-cEmbedded libcimplementsISO Cimplements selected hosted and freestanding library facilities for embedded targetsThe Newlib Homepage; Picolibc C library for embedded systems
debugger-reads-objectGDB / LLDBinspectsELF / COFFreads symbols, debug information, unwind metadata, registers, and process or target stateDebugging with GDB; LLDB documentation
sanitizers-instrument-clangSanitizersextendsClang / LLVMadds compiler instrumentation and runtime checks to selected buildsAddressSanitizer; UndefinedBehaviorSanitizer
analyzer-checks-sourceStatic analysischecksSources + headersmodels paths and coding contracts without executing the targetClang Static Analyzer; SEI CERT C Coding Standard
kbuild-configures-kernelKconfig + kbuildbuildsLinux kernelselects objects and generates vmlinux, modules, and architecture boot productsLinux Kernel Makefiles; Kconfig Language
kbuild-invokes-compilersKconfig + kbuildinvokesGCCdrives supported C compilers with kernel and architecture flagsLinux Kernel Makefiles; Programming Language
kbuild-invokes-assemblerKconfig + kbuildinvokesAssemblerbuilds hand-written and preprocessed architecture assembly alongside CLinux Kernel Makefiles
kbuild-invokes-linkerKconfig + kbuildinvokesLinkeruses architecture linker scripts and ordered built-in archives for vmlinux and modulesLinux Kernel Makefiles
kernel-contains-subsystemsLinux kernelprovides-apiKernel subsystemshosts shared scheduling, memory, VFS, networking, block, and security contractsCore API Documentation
drivers-use-subsystemsDrivers + modulesimplementsKernel subsystemsimplements bus and device operations exposed by kernel subsystemsThe Linux driver implementer's API guide
modules-link-kernelDrivers + modulesloads-intoLinux kernelloads built modules into the same privileged kernel address spaceBuilding External Modules
ebpf-hooks-kerneleBPFexecutesLinux kernelruns verified bytecode through interpreter or JIT at selected kernel hooksBPF Documentation
qemu-runs-kernelQEMUruns-onLinux kernelemulates target hardware for kernel boot and subsystem testingSystem Emulation Introduction
cmsis-specifies-bspCMSISprovides-apiBSP + startup + ISRstandardizes core headers, startup expectations, interrupt names, and device support seamsCMSIS Introduction; Using CMSIS in Embedded Applications
bsp-mixes-c-asmBSP + startup + ISRintegrates-withAssemblercombines C initialization and handlers with reset stubs, vector entries, and privileged instructionsUsing CMSIS in Embedded Applications; Using as — GNU Assembler
bsp-controls-linkBSP + startup + ISRconfiguresLinkerdefines memory regions, section placement, entry point, stacks, heaps, and image layoutLinker Scripts; Using CMSIS in Embedded Applications
freertos-uses-bspFreeRTOSruns-onBSP + startup + ISRdepends on a processor port, interrupt/tick setup, stacks, and board servicesFreeRTOS kernel fundamentals
zephyr-generates-bspZephyrconfiguresBSP + startup + ISRcombines board, SoC, devicetree, Kconfig, and driver information into a firmware buildZephyr Project Documentation; Devicetree access from C/C++
rtems-uses-bspRTEMSruns-onBSP + startup + ISRports executive services through CPU, BSP, and device-driver layersRTEMS Documentation
nuttx-uses-bspNuttXruns-onBSP + startup + ISRbinds configured OS services to architecture, board, and driver implementationsApache NuttX Documentation
embedded-libc-serves-rtosEmbedded libcintegrates-withFreeRTOSretargets library I/O, allocation, and process hooks to the selected firmware environmentThe Newlib Homepage; FreeRTOS kernel fundamentals
debugger-reaches-bspGDB / LLDBinspectsBSP + startup + ISRuses remote probes or stubs to inspect registers, memory, threads, and symbols on targetDebugging with GDB; CMSIS Introduction
ros-rcl-uses-rmwROS 2 rcldepends-onROS 2 rmwimplements common client behavior over the replaceable middleware C interfaceInternal ROS 2 interfaces
rclc-extends-rclmicro-ROS rclcextendsROS 2 rcladds C convenience functions and executor policies over the common client layerrclc — ROS client library in C
rclc-runs-rtosmicro-ROS rclcruns-onFreeRTOSsupports resource-constrained real-time deployments over an RTOS integrationrclc — ROS client library in C; FreeRTOS kernel fundamentals
px4-runs-nuttxPX4runs-onNuttXuses NuttX as its primary flight-controller RTOS and POSIX-like runtime boundaryPX4 Architectural Overview
px4-publishes-uorbPX4integrates-withROS 2 rmwbridges versioned vehicle topics toward external ROS 2 and DDS-compatible systemsuORB Messaging; Internal ROS 2 interfaces
px4-speaks-mavlinkPX4communicates-viaMAVLinkexchanges telemetry, commands, parameters, and mission messages with external systemsPX4 Architectural Overview; MAVLink Developer Guide
ardupilot-uses-mavlinkArduPilotcommunicates-viaMAVLinkuses generated protocol messages for vehicle and ground-system communicationLearning ArduPilot — Introduction; MAVLink Developer Guide
ardupilot-uses-halArduPilotintegrates-withBSP + startup + ISRuses AP_HAL implementations to isolate vehicle and shared-library code from ChibiOS, Linux, ESP32, and board-specific servicesLearning ArduPilot — Introduction
ffmpeg-orchestrates-formatFFmpeg toolsinvokeslibavformatopens inputs and outputs and transfers compressed packets through format contextsFFmpeg Documentation; Libavformat Documentation
ffmpeg-orchestrates-codecFFmpeg toolsinvokeslibavcodecselects and drives decoders and encoders for packet/frame conversionFFmpeg Documentation; FFmpeg library modules
ffmpeg-orchestrates-filterFFmpeg toolsinvokeslibavfilterconstructs and schedules audio/video filter graphs between decode and encodeFFmpeg Documentation; FFmpeg library modules
format-feeds-codeclibavformatproduceslibavcodecdemultiplexes container streams into compressed packets consumed by codecsLibavformat Documentation; FFmpeg library modules
codec-feeds-filterlibavcodecproduceslibavfilterdecodes packets into frames consumed by filter graphsFFmpeg library modules
filter-uses-utilslibavfilterdepends-onUtility + conversion libsuses common buffers and frame metadata plus negotiated scale/resample conversionsFFmpeg library modules
codec-dispatches-dsplibavcodecexecutesSIMD assemblydispatches hot kernels to architecture-specific optimized implementations when supportedcheckasm — for all your assembly checking needs; FFmpeg Developer Documentation
filter-dispatches-dsplibavfilterexecutesSIMD assemblyuses optimized pixel, audio, and transform functions behind library interfacescheckasm — for all your assembly checking needs
dsp-obeys-abiSIMD assemblyimplementsPlatform ABImust preserve the calling, stack, register, symbol, and unwind contract seen by C callersSystem V Application Binary Interface AMD64 Architecture Processor Supplement; Procedure Call Standard for the Arm 64-bit Architecture; RISC-V ELF psABI Document
codec-uses-hardwarelibavcodecacceleratesHardware accelerationmaps supported codecs and frame surfaces onto external device APIsFFmpeg Hardware Acceleration
hardware-returns-framesHardware accelerationintegrates-withlibavfiltershares or transfers device-backed frames across filter and encode boundariesFFmpeg Hardware Acceleration
sanitizers-check-ffmpegSanitizerschecksFFmpeg toolsinstruments portable C paths in dedicated test builds while assembly and device code need separate coverageAddressSanitizer; FFmpeg Developer Documentation
qemu-runs-rtosQEMUruns-onZephyrprovides emulated machines for repeatable RTOS and driver tests where supportedSystem Emulation Introduction; Zephyr Project Documentation
face-constrains-rtosFACEintegrates-withRTEMSplaces portable avionics components above defined operating-system and transport service segmentsFACE Technical Standard and corresponding documents; RTEMS Documentation
mosa-governs-interfacesDoD MOSAextendsPlatform ABItreats well-defined, testable technical interfaces as life-cycle modularity boundariesModular Open Systems Approach
assurance-checks-bspAssurance ruleschecksBSP + startup + ISRapplies restricted-language, traceability, analysis, and controlled-deviation practices to critical low-level codeMISRA C:2025 — Guidelines for the use of the C language in critical systems; AC 20-115D — Airborne Software Development Assurance Using ED-12() and DO-178()
kernel-obeys-abiLinux kernelimplementsPlatform ABIdefines additional internal conventions but still relies on architecture object, register, entry, and toolchain contractsProgramming Language; Assembler Annotations

All 69 typed relationships in data/c-ecosystem.json. Every endpoint resolves to one component above, and every edge carries upstream evidence.

Back to top

Current direction and durable role

C23 is a real modernization of the language, and WG14 has already moved into C2y work, but the most important current ecosystem change happens outside syntax: stronger pressure to prevent memory-safety defects, mix memory-safe languages into existing systems, isolate parsers and privileged services, preserve exact build provenance, and treat binary and hardware contracts as reviewable architecture.

C will remain difficult to displace where it is itself the interface: firmware startup, platform ABIs, libc, kernel internals, device SDKs, language runtimes, codecs, and stable foreign-function surfaces. That durable role does not imply that every adjacent component should also be C. A healthy modern system tends to make the C core narrower, more explicit, more heavily checked, and easier to replace or wrap.

The deepest common pattern across Linux, RTOS firmware, robotics, drones, and FFmpeg is a narrow portable contract over replaceable machine-specific implementations. It succeeds when the boundary carries enough truth: ABI and layout, ownership and lifetime, time and ordering, resource ceilings, error states, capability discovery, fallback, and verification. C’s future is strongest where those contracts are visible—and weakest where a raw pointer or undocumented macro is expected to carry them by convention.

Back to top

Sources

Language, platform, standards-body, regulator, government, and upstream project sources were checked for this 2026-09-03 snapshot. Version numbers are included only where they date a claim; project documentation remains the authority after the snapshot.

  1. ISO/IEC 9899:2024 — Programming languages — C, ISO.
  2. C project status and milestones, ISO/IEC JTC 1/SC 22/WG14.
  3. The Development of the C Language, Bell Labs / Dennis M. Ritchie.
  4. POSIX.1-2024, The Open Group Base Specifications Issue 8, The Open Group / IEEE.
  5. System V Application Binary Interface AMD64 Architecture Processor Supplement, x86-64 psABI project.
  6. Procedure Call Standard for the Arm 64-bit Architecture, Arm.
  7. RISC-V ELF psABI Document, RISC-V International.
  8. MISRA C:2025 — Guidelines for the use of the C language in critical systems, The MISRA Consortium.
  9. SEI CERT C Coding Standard, Carnegie Mellon Software Engineering Institute.
  10. FACE Technical Standard and corresponding documents, The Open Group FACE Consortium.
  11. Modular Open Systems Approach, U.S. Department of Defense, OUSD(R&E).
  12. MIL-STD-882E Change 1 — System Safety, U.S. Department of Defense ASSIST.
  13. AC 20-115D — Airborne Software Development Assurance Using ED-12() and DO-178(), U.S. Federal Aviation Administration.
  14. GNU Make Manual, GNU Project.
  15. CMake Documentation, Kitware.
  16. The Meson Build System, Meson project.
  17. Ninja Manual, Ninja project.
  18. Guide to pkg-config, freedesktop.org.
  19. Conan 2 documentation, Conan project.
  20. vcpkg documentation, Microsoft.
  21. The C Preprocessor, GNU Project.
  22. Using the GNU Compiler Collection, GNU Project.
  23. Extended Asm — Assembler Instructions with C Expression Operands, GNU Project.
  24. Clang documentation, LLVM Project.
  25. C language reference, Microsoft.
  26. Using as — GNU Assembler, GNU Project.
  27. LD — GNU Linker, GNU Project.
  28. Linker Scripts, GNU Project.
  29. System V ABI — Generic ABI, Xinuos.
  30. PE Format, Microsoft.
  31. The GNU C Library Reference Manual, GNU Project.
  32. About musl, musl libc project.
  33. The Newlib Homepage, Newlib project.
  34. Picolibc C library for embedded systems, Picolibc project.
  35. Debugging with GDB, GNU Project.
  36. LLDB documentation, LLVM Project.
  37. AddressSanitizer, LLVM Project.
  38. UndefinedBehaviorSanitizer, LLVM Project.
  39. Clang Static Analyzer, LLVM Project.
  40. The Linux Kernel Archives, Linux Kernel Organization.
  41. Programming Language, Linux kernel documentation.
  42. Building Linux with Clang/LLVM, Linux kernel documentation.
  43. Linux Kernel Makefiles, Linux kernel documentation.
  44. Kconfig Language, Linux kernel documentation.
  45. Core API Documentation, Linux kernel documentation.
  46. The Linux driver implementer's API guide, Linux kernel documentation.
  47. Building External Modules, Linux kernel documentation.
  48. BPF Documentation, Linux kernel documentation.
  49. Assembler Annotations, Linux kernel documentation.
  50. System Emulation Introduction, QEMU Project.
  51. CMSIS Introduction, Arm.
  52. Using CMSIS in Embedded Applications, Arm.
  53. FreeRTOS kernel fundamentals, Amazon Web Services / FreeRTOS.
  54. Zephyr Project Documentation, Zephyr Project.
  55. Devicetree access from C/C++, Zephyr Project.
  56. RTEMS Documentation, RTEMS Project.
  57. Apache NuttX Documentation, Apache Software Foundation.
  58. Internal ROS 2 interfaces, Open Robotics.
  59. ROS 2 Executors, Open Robotics.
  60. rclc — ROS client library in C, Open Robotics / micro-ROS.
  61. PX4 Architectural Overview, PX4 / Dronecode Foundation.
  62. uORB Messaging, PX4 / Dronecode Foundation.
  63. Learning ArduPilot — Introduction, ArduPilot Project.
  64. Download FFmpeg, FFmpeg Project.
  65. FFmpeg Documentation, FFmpeg Project.
  66. FFmpeg library modules, FFmpeg Project.
  67. Libavformat Documentation, FFmpeg Project.
  68. FFmpeg Developer Documentation, FFmpeg Project.
  69. checkasm — for all your assembly checking needs, FFmpeg Project.
  70. FFmpeg Hardware Acceleration, FFmpeg Project.
  71. Product Security Bad Practices, CISA and FBI.
  72. Memory Safe Languages: Reducing Vulnerabilities in Modern Software Development, NSA and CISA.

Back to top