[REP Index] [REP Source]

REP:3
Title:Target Platforms
Author:Tully Foote <tfoote at willowgarage.com>, 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

Abstract

This REP defines target platforms for each ROS Distribution Release. We define platforms to include both operating system releases (e.g. Ubuntu Lucid (10.04 LTS)) as well as major language releases (e.g. Python 2.6). 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.

Platforms by Distribution

If planned support for a target platform is changed, notice will be sent to ros-developers to enable discussion of this issue.

Box Turtle (Feb 2010)

  • Ubuntu Hardy (8.04 LTS)
  • Ubuntu Intrepid (8.10)
  • Ubuntu Jaunty (9.04)
  • Ubuntu Karmic (9.10)
  • C++03
  • Boost 1.37
  • Lisp SBCL 1.0.38
  • Python 2.5

C Turtle (Aug 2010)

  • Ubuntu Jaunty (9.04)
  • Ubuntu Karmic (9.10)
  • Ubuntu Lucid (10.04 LTS)
  • Ubuntu Maverick (10.10)
  • C++03
  • Boost 1.37
  • Lisp SBCL 1.0.38
  • Python 2.5

Diamondback (Feb 2011)

  • Ubuntu Lucid (10.04 LTS)
  • Ubuntu Maverick (10.10)
  • Ubuntu Natty (11.04)
  • C++03
  • Boost 1.40
  • Lisp SBCL 1.0.38
  • Python 2.6

Electric Emys (Aug 2011)

  • Ubuntu Lucid (10.04 LTS)
  • Ubuntu Maverick (10.10)
  • Ubuntu Natty (11.04)
  • Ubuntu Oneiric (11.10)
  • C++03
  • Boost 1.40
  • Lisp SBCL 1.0.x
  • Python 2.6

Fuerte Turtle (Mar 2012)

  • Ubuntu Lucid (10.04 LTS)
  • Ubuntu Oneiric (11.10)
  • Ubuntu Precise (12.04 LTS)
  • C++03
  • Boost 1.40
  • Lisp SBCL 1.0.x
  • Python 2.6

Groovy Galapagos (Oct 2012)

  • Ubuntu Oneiric (11.10)
  • Ubuntu Precise (12.04 LTS)
  • Ubuntu Quantal (12.10)
  • C++03
  • Boost 1.46
  • Lisp SBCL 1.0.x
  • Python 2.7
  • CMake 2.8.3

Hydro Medusa (Aug 2013)

  • Ubuntu Precise (12.04 LTS)
  • Ubuntu Quantal (12.10)
  • Ubuntu Raring (13.04)
  • C++03
  • Boost 1.48
  • Lisp SBCL 1.0.x
  • Python 2.7
  • CMake 2.8.3

Indigo Igloo (May 2014)

  • Ubuntu Saucy (13.10)
  • Ubuntu Trusty (14.04 LTS)
  • C++03
  • Boost 1.53
  • Lisp SBCL 1.0.x
  • Python 2.7 (Additional testing against Python 3.3 recommended)
  • CMake 2.8.11

Motivation

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.

Rationale

Target platforms for future releases are speculative and are based on consulting Ubuntu's release and end-of-life schedule [1].

The following rules are used for choosing the target platforms. They aim to limit the number of supported Ubuntu version for each ROS distribution to a small number (<= 3) as well as provide a reasonable upgrade path for users as well as maintainers of packages.

  • The latest Ubuntu version (released around the same time as the ROS distribution).
  • The current Ubuntu LTS version.
  • The previous Ubuntu version.
  • At least one Ubuntu version which is common with the two previous ROS distributions.

Any "formula" requires making assumptions about future Ubuntu library choices and other crystal-ball projections. While we will do our best to follow the assumed target schedule, we reserve the right to change support targets based on Ubuntu library choices or other considerations. For example, the formula above assumes that a ROS distribution release can be made compatible with future Ubuntu releases. In the event that forward integration cannot be done without introducing destabilizing changes, preference will always be given to maintaining stability of the existing release.

We generally expect to use the ROS Distribution release prior to an Ubuntu LTS release to transition to newer libraries and drop support for older platforms. Our past experience with Ubuntu releases is that the release prior to an LTS release (e.g. Karmic (9.10)) incorporates major jumps in library versions; also, this release is generally very similar to the LTS release. Requiring that all stacks be compatible across a wide spread of Ubuntu releases can be very difficult, especially for libraries like Boost that do not provide for backwards compatibility.

C++

We use the C++03 (ISO/IEC 14882:2003) standard, and are 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.

Use of C++[0|1]x or tr1 features are only allowed if support for that feature is checked at compile time, and equivalent functionality exists without requiring C++[0|1]x code. A wholesale jump to C++[0|1]x will not happen until all commonly used OS platforms fully support it.

For a given release we allow use of Boost libraries that match the version provided in our low-water-mark Ubuntu version.

Lisp

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.

Python

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 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.

Core Stacks

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.

C Turtle

This REP applies to stacks in the base variant for C Turtle.

Diamondback

This REP applies to stacks in the desktop-extras variant [2] for Diamondback.

Non-core Stacks

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.

References and Footnotes

[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)