Open-source project
ArduPilot/ardupilot avatar
ArduPilot/ardupilot

ArduPilot: One Codebase, Five Vehicle Types, and the Cost of That Breadth

ArduPlane, ArduCopter, ArduRover, ArduSub source. Our autopilot software is capable of controlling almost any vehicle system imaginable, from conventional airplanes, quad planes, multi-rotors, and helicopters to rovers, boats, balance bots, and even submarines.

15,868 stars21,394 forksC++GPL-3.0

At a glance

What is it?
ArduPilot is a GPL-3.0 C++ autopilot covering copter, plane, rover, sub, and antenna tracker. Its single-repo design enables shared code but demands careful board selection and a real commitment to testing.
Who is it for?
Adopt ArduPilot if you need one autopilot that spans multiple vehicle types and you are prepared to work within a large, active codebase with a steep learning curve. Do not adopt it if you want a small, single-purpose flight stack or if GPL-3.0 is incompatible with your product's licensing.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly C++, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What ArduPilot Actually Is

ArduPilot is not a single drone program. It is a collection of vehicle-specific firmware built from one shared C++ repository. The README lists ArduCopter, ArduPlane, Rover, ArduSub, and AntennaTracker as the main components. Each has its own code directory and wiki. The project has been developed since 2010 by a team of professional engineers and community contributors. That long history shows in the breadth: conventional airplanes, quad planes, multi-rotors, helicopters, rovers, boats, balance bots, and submarines are all mentioned as supported. For an engineer evaluating autopilot options, the key point is that you are not choosing a single product. You are choosing a common codebase that can be compiled for different vehicle roles. That is both a strength and a source of complexity.

The Single Repository Architecture

The repository layout is the first thing to understand. All vehicle code lives under the same root, with folders like ArduCopter, ArduPlane, Rover, ArduSub, and AntennaTracker. Shared libraries are not listed in the README excerpt, but the maintainers list references subsystems such as AP_NavEKF2 and AP_NavEKF3, which are the navigation filters. This structure means that a fix to a GPS library or a battery monitor can benefit all vehicle types at once. The downside is that changes in shared code can affect multiple vehicles, so testing becomes broader. The README shows several GitHub Actions workflows for SITL (software in the loop) tests, one per vehicle: test_sitl_copter, test_sitl_plane, test_sitl_rover, test_sitl_sub, and test_sitl_tracker. That is a practical acknowledgement of the risk. Each vehicle gets its own simulation test, but the shared code still needs cross-vehicle validation.

Vehicle-Specific Code and Maintainers

Each vehicle has dedicated maintainers. For example, Andrew Tridgell handles Plane and AntennaTracker, Grant Morphett handles Rover, and Willian Galvani handles Sub. This division of labor is not cosmetic. It signals that the code for each vehicle is not a thin wrapper over a generic core. The maintainers list also shows subsystem owners, such as Peter Barker for DataFlash and tools, and Leonard Hall for Copter attitude control and navigation. If you are adopting ArduPilot for a specific vehicle, you should look at who maintains that code and how active they are. The README does not give commit counts or activity metrics, but the presence of named maintainers for each area is a signal of accountability. For a project this large, that is more useful than a vague claim of community support.

Getting Started: Commands and Build Process

The README does not include build instructions. That is a notable gap for a new user. The developer wiki is linked, but the repository itself assumes you know how to build C++ for embedded targets. Based on the repository structure, you would need to install the ArduPilot toolchain, which typically includes a cross-compiler for your target board. The README does mention SITL tests, which run the autopilot in a simulated environment. To run those, you would clone the repository and use the provided build scripts, but the exact commands are not in the material. This is a real friction point. If you are evaluating ArduPilot, expect to spend time reading the developer wiki before you get a binary. The project's own documentation is the source of truth, not the README.

Licensing: GPL-3.0 and What It Means for You

The project is licensed under GPL-3.0. The README links to an overview and the full text. GPL-3.0 is a strong copyleft license. If you distribute a product that includes ArduPilot code, you may be required to release your modifications under the same license. That is a critical consideration for commercial projects. The README does not offer a dual license or a commercial exception. The license page is linked, but the README itself states the license plainly. For an engineer, this means ArduPilot is not a drop-in library for a closed-source product. You must understand the obligations before you start. The project's maintainers are aware of this, as they provide a license overview, but the burden is on you to read it.

Testing and Quality Assurance Infrastructure

The README lists multiple CI workflows: SITL tests for each vehicle, ChibiOS tests, Linux SBC tests, replay tests, unit tests, size tests, and environment tests. There is also a link to Coverity, a static analysis tool. This is a substantial testing infrastructure. The presence of replay tests is interesting. Replay allows you to feed recorded flight data back through the code, which helps debug issues after a crash or a failure. The size test likely checks that firmware fits within board memory limits. For an autopilot, where a bug can crash a vehicle, this level of testing is not a luxury. It is a practical necessity. The project also links to autotest.ardupilot.org, which appears to be a public dashboard of test results. This transparency is a point in ArduPilot's favor, but it also means that you should check the current status before relying on a particular branch.

Limitations and When ArduPilot Is the Wrong Tool

The most obvious limitation is complexity. With five vehicle types and dozens of subsystems, the learning curve is steep. The README does not provide a quick start guide. You have to navigate to the wiki for each vehicle. Another limitation is board support. The maintainers list names specific boards like Pixhawk, Pixhawk2, PixRacer, Cube, and others. Not every flight controller is supported. If your board is not listed, you may need to port the code, which is a significant undertaking. Also, the project is under continuous development. The recent releases are all version 4.7.0, but the last push date is July 2026, so the code is moving. That means you need to track changes if you are using a stable release. ArduPilot is also not the right choice if you need a minimal autopilot for a simple drone. The codebase is large, and the build system is not trivial. For a hobby project with a specific, narrow use case, a simpler stack might be more appropriate.

Alternatives and the Difference in Approach

The main alternative in the open source autopilot space is PX4. PX4 is also a C++ autopilot with a similar vehicle range, but it uses a different architecture. PX4 is built around a real-time operating system with a publish-subscribe message bus, while ArduPilot uses a more monolithic, vehicle-specific design. The README does not mention PX4, but the architectural difference is well known. In ArduPilot, each vehicle has its own main loop and control logic, whereas PX4 separates the flight stack from the vehicle-specific code. That means PX4 might be easier to extend for novel vehicle types, but ArduPilot's vehicle-specific code might be more optimized for each existing type. The choice depends on your needs. If you want a proven, vehicle-specific autopilot with a long history, ArduPilot is strong. If you want a more modular architecture that is designed for research and new vehicle concepts, PX4 could be a better fit. The README does not compare them, so you would need to evaluate both based on your own criteria.

Maintenance and Upgrade Cost

The README lists a large number of maintainers, each responsible for specific vehicles or subsystems. That suggests a distributed maintenance model. The project has been around since 2010, so it has a track record of sustained development. However, that also means the codebase is large and may have legacy components. The release notes for 4.7.0 are not detailed in the README, but the version number suggests a steady cadence of major releases. Upgrading from one version to another may require reading migration guides, which are not in the README but are likely in the wiki. The CI workflows include test_size, which suggests that boards have limited memory. That means adding features could require careful memory management. For a developer, this means the cost of maintaining a fork or a custom build is non-trivial. You need to track upstream changes and ensure your modifications still compile and pass tests.

Who Should Adopt ArduPilot and What to Verify First

Adopt ArduPilot if you need a single autopilot that can handle multiple vehicle types, especially if you are already familiar with the ecosystem. It is also a good choice if you want a large community and extensive documentation. Do not adopt it if you need a minimal, easy-to-understand codebase or if GPL-3.0 is a problem for your project. Before you commit, verify that your specific flight controller board is supported. Check the maintainers list for your board or vehicle. Look at the recent releases for your vehicle type to see if they are active. Run the SITL tests for your vehicle to see if they pass. The README links to the GitHub Actions workflows, so you can see the status. Also, read the developer wiki for build instructions, since the README does not provide them. Finally, check the license overview to understand your obligations. ArduPilot is a powerful system, but it is not a simple one. Your success depends on how much effort you are willing to put into learning its structure and keeping up with its changes.

Editorial conclusion

Adopt ArduPilot if you need one autopilot that spans multiple vehicle types and you are prepared to work within a large, active codebase with a steep learning curve. Do not adopt it if you want a small, single-purpose flight stack or if GPL-3.0 is incompatible with your product's licensing. Before committing, verify that your specific flight controller board is supported, check the current release notes for your vehicle type, and run the SITL tests for that vehicle to confirm the behavior matches your expectations.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Community notes

Community notes