[REP Index] [REP Source]
REP: | 3 |
---|---|
Title: | Target Platforms |
Author: | Tully Foote <tfoote at openrobotics.org>, Ken Conley <kwc at willowgarage.com> |
Status: | Active |
Type: | Informational |
Content-Type: | text/x-rst |
Created: | 21-Sep-2010 |
Post-History: | 21-Sep-2010, 17-Jan-2011, 13-Jan-2015, 21-Sep-2015, 10-Jan-2017, 23-Oct-2017, 08-April-2020 |
Contents
This REP defines target platforms for each ROS Distribution Release. We define platforms to include both operating system releases (e.g. Ubuntu Trusty (14.04 LTS)) as well as major language releases (e.g. Python 2.7). The target platforms represent the set on which all core stacks are expected to work. Exceptions can be made for stacks that are intentionally platform-specific.
If planned support for a target platform is changed, notice will be sent to ros-developers to enable discussion of this issue.
Build System Support:
Required Support for:
Minimum Requirements:
Exact or Series Requirements:
Build System Support:
Required Support for:
Recommended Support for:
Minimum Requirements:
Exact or Series Requirements:
Build System Support:
Required Support for:
Recommended Support for:
Architectures Supported:
Targeted Languages:
Requirements:
Package | Ubuntu Xenial | Ubuntu Yakkety | Ubuntu Zesty | Debian Stretch | Fedora 26 |
---|---|---|---|---|---|
Required Support | Recommended support | ||||
Boost | 1.58 | 1.61 | 1.62 | 1.62 | 1.63 |
CMake | 3.5.1 | 3.5.2 | 3.7.2 | 3.7.2 | 3.7.2 |
Gazebo | 7.0 | 7.3.1 | 7.5 | 7.3.1 | 7.x |
Ogre | 1.9 | 1.9 | 1.9 | 1.9 | 1.9 |
OpenCV | 3.x* | 3.x* | 3.x* | 3.x* | 3.x* |
PCL | 1.7.2 | 1.8.0 | 1.8.0 | 1.8.0 | 1.8.0 |
PyQt | 5.5.1 | 5.7 | 5.7 | 5.7 | 5.7 |
Qt5 | 5.5.1 | 5.6.1 | 5.7.1 | 5.7.1 | 5.7.1 |
" * " means that this is not the upstream version (available on the official Operating System repositories) but a package distributed by OSRF or the community (package built and distributed on custom repositories).
Maintainers can choose to support even lower versions to also cover older ROS distributions and thus avoid branching out.
Build System Support:
Required Support for:
Recommended Support for:
Architectures Supported:
Binary Package Support:
Not all platforms and architectures get binary packages. Binary packages are built until the platform reaches its EOL date.
Arch | Ubuntu Artful | Ubuntu Bionic | Debian Stretch | Fedora 28 |
---|---|---|---|---|
amd64 | Until Jul '18 | Until Apr '23 | Until Jul '20 | |
arm64 | Until Apr '23 | Until Jul '20 | ||
arm32 | Until Apr '23 |
Targeted Languages:
Requirements:
Package | Ubuntu Artful | Ubuntu Bionic | Debian Stretch | Fedora 28 |
---|---|---|---|---|
Required Support | Recommended support | |||
Boost | 1.62 | 1.65.1! | 1.62 | 1.66! |
CMake | 3.9.1 | 3.10.2! | 3.7.2 | 3.10.2! |
Gazebo | 9.0.0* | 9.0.0! | 9.0.0* | 8.3.0! |
Ogre | 1.9 | 1.9! | 1.9 | 1.9! |
OpenCV | 3.2* | 3.2 | 3.2* | 3.4.1 |
PCL | 1.8.1 | 1.8.1! | 1.8.0 | 1.8.1! |
PyQt | 5.7 | 5.10.1! | 5.7 | 5.10! |
Qt5 | 5.9.1 | 5.9.5! | 5.7.1 | 5.10.0! |
" * " means that this is not the upstream version (available on the official Operating System repositories) but a package distributed by OSRF or the community (package built and distributed on custom repositories).
" ! " means that this package will be at least this version (since these distributions have not yet been released); this may change as those releases get closer.
Maintainers can choose to support even lower versions to also cover older ROS distributions and thus avoid branching out.
Build System Support:
Required Support for:
Recommended Support for:
Architectures Supported:
Binary Package Support:
Not all platforms and architectures get binary packages. Binary packages are built until the platform reaches its EOL date.
Arch | Ubuntu Focal | Debian Buster | Fedora 32 |
---|---|---|---|
amd64 | Until Apr '25 | Until Sep '22 | |
arm64 | Until Apr '25 | Until Sep '22 | |
arm32 | Until Apr '25 |
Targeted Languages:
Requirements:
Package | Ubuntu Focal | Debian Buster | Fedora 32 |
---|---|---|---|
Required Support | Recommended support | ||
Boost | 1.71! | 1.67 | 1.69! |
CMake | 3.16.3! | 3.13.4 | 3.17! |
Gazebo | 11.x* | 11.x* | 10.1.0! |
Ignition | Citadel | Citadel | N/A |
Ogre | 1.9! | 1.9 | 1.9! |
OpenCV | 4.2! | 3.2 | 4.2 |
PCL | 1.10! | 1.9.1 | 1.9.1! |
PyQt | 5.14.1! | 5.11.3 | 5.14.2! |
Qt5 | 5.12.5! | 5.11.3 | 5.13.2! |
" * " means that this is not the upstream version (available on the official Operating System repositories) but a package distributed by OSRF or the community (package built and distributed on custom repositories).
" ! " means that this package will be at least this version (since these distributions have not yet been released); this may change as those releases get closer.
This document is provided to help plan future development for libraries. The primary platforms for ROS are Canonical's Ubuntu releases, and our intent is to track these releases as best as possible while also allowing for current, thirdparty libraries to be used.
Target platforms for future releases are speculative and are based on consulting Ubuntu's release and end-of-life schedule [1].
These targets, including starting and ending support dates, are based on the Distribution Timeline to meet minimum requirements. [3]
As of ROS Lunar, we do not build packages for i386 architectures. Released code is still expected to build on i386. Ubuntu switched its default to 64bits and we noticed a significant decrease of ROS package downloads for this architecture.
The C++ code in ROS is meant to be compiler-agnostic. While we mainly develop with gcc, no use of compiler-specific features is allowed without proper use of macros to allow use on other platforms or with other compilers.
As of ROS Melodic, we are using the C++14 (ISO/IEC 14882:2014) standard. All packages are free to use C++14 features in public and private APIs. Before changing existing public APIs to use C++14 features, package maintainers should carefully consider whether the change is worth the breakage to downstream consumers of the API. If at all possible, maintainers should use a "tick-tock" model where the new APIs are introduced alongside the old (deprecated) APIs, and then remove the old APIs in a subsequent release.
As of ROS Jade, we are still using the C++03 (ISO/IEC 14882:2003) standard.
Use of C++11/C++14 features and filesystem/networking/etc... TS's (Technical Specifications) is allowed if they are checked for at configure time and equivalent functionality can be provided without the extra compiler features. Support for C++11 is now a compiler requirement, but the API of the packages included in desktop-full will not use any C++11-specific feature. External packages are encouraged to follow this guideline.
For a given release we allow use of Boost libraries that match the version provided in our low-water-mark Ubuntu version.
We use Steel Bank Common Lisp as our ANSI Common Lisp implementation. We are currently tracking SBCL 1.0.38 and will track future updates in the 1.0.x series as appropriate.
Our intent with Python is to track the minimum version provided in the supported Ubuntu platforms, as well as survey other commonly used OS platforms that support ROS to determine a reasonable minimum target.
Ubuntu will most likely stop supporting Python 2 in release 20.04. To make sure ROS will be able to support that version of Ubuntu, ROS Python packages starting with Melodic Morenia are highly encouraged to support both Python 2.7 and Python 3.5 or later. During the development of Melodic there will be work undertaken to support both Python 2 and Python 3 (including rosdep keys) so ROS package developers can more easily test with either version of Python.
Ubuntu has announced plans to release 14.04 in April 2014 with Python 3 as its default interpreter. Some ROS infrastructure and core scripts already work with Python 3 since Groovy. But, it remains difficult to set up a test environment so ROS package developers can also port to Python 3.
The preferred migration strategy is to support both Python 2.7 and Python >= 3.2 in each source script. Supporting any version earlier than 2.6 makes that task harder. Python 3.0 and 3.1 will probably never be supported explicitly, although some things may work.
catkin was officially introduced in Groovy beside rosbuild.
Since even half a year after the Hydro release not a single rosbuild-based package was released the support for building Debian packages of rosbuild-based packages has been discontinued in Hydro.
As of Indigo the ROS build farm also only supports documenting and continuous integration testing of catkin-based packages. Since Indigo is a LTS release and aims to be supported for several years maintaining the legacy code for rosbuild-based packages seems to be impractical.
rosbuild-based packages can still be built from source (which should also be supported in upcoming ROS distributions).
Core stacks are required to comply with the target platforms listed here, though exceptions can be granted for core stacks that are inherently platform-specific. The set of core stacks is currently defined by variants included with each ROS distribution release.
This REP applies to stacks in the base variant for C Turtle.
This REP applies to stacks in the desktop-extras variant [2] for Diamondback.
And thirdly, the code is more what you'd call "guidelines" than actual rules...
We hope that ROS stack maintainers will make every effort to comply with the target platforms within this REP, but we recognize that ROS stacks represent a spectrum of development, from research prototypes to hardened libraries. There are also cases where supporting target platforms may incur unnecessary effort, such as a set of drivers for a specific robot platform.
[1] | Ubuntu Releases with End-of-Life Dates (https://wiki.ubuntu.com/Releases) |
[2] | REP 108, ROS Diamondback Variants (http://www.ros.org/reps/rep-0108.html) |
[3] | Distribution Timeline (http://wiki.ros.org/Distributions) |
This document has been placed in the public domain.