You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Edit: an amended version of this proposal (see #1244 (comment)) was implemented.
Background
Currently we include the major version number of a Gazebo package in its package name. This allows multiple versions of packages to be installed side-by-side but induces churn each year when releasing new versions and when users upgrade to new versions.
Proposal
Remove the major version from Gazebo package names, including the following places:
The first argument to cmake project() invocations in the root CMakeLists.txt should not include the major version number. For example: project(gz-utils4 VERSION 4.0.0) should instead be project(gz-utils VERSION 4.0.0)
The //package/name field in package.xml files should not include the major version number. For example: <name>gz-utils4</name> should instead be <name>gz-utils</name>
The major version number should not be used when finding a package with cmake’s find_package() function. For example: find_package(gz-utils4 REQUIRED COMPONENTS log) should instead be find_package(gz-utils REQUIRED COMPONENTS log)
EDIT 2025-02-27: Since eliminating the major version from the find_package statements can allow incompatible versions to be found without generating a configuration error, it is recommended to adopt a unified branch naming convention for all packages in a given collection (see Proposal: name branches consistently for each collection #1273). The ease of comparing branch names should mitigate the loss of configuration errors.
Alternative considered: continue specifying required versions as a separate find_package argument, like find_package(gz-utils 4 REQUIRED COMPONENTS log). While this retains the strict versioning, it is functionally equivalent to the existing convention with extra whitespace and retains the undesired churn.
The debian package names should not include the major version: sudo apt install libgz-utils-dev
EDIT 2025-02-27: a consequence of these changes is that multiple versions of a gazebo package can no longer be installed side-by-side in the same prefix. Furthermore if package names like libgz-utils-dev are used, multiple versions of gazebo binaries cannot be hosted in the same apt repository. As such, only one Gazebo collection should be supported on a given debian distribution.
Alternative considered: build alternate binary versions of gazebo with major version numbers in the debian package names (libgz-utils4-dev) with conflicts between different versions of the same package. Still only one version may be installed at a time, but they can be hosted in the same apt repository.
Alternative considered: same as previous alternative but with the collection name in the debian package name instead of major version numbers (libgz-jetty-utils-dev). Or do both, with the collection-named binaries as aliases of the packages with version numbers.
Alternative considered: build debian packages without version numbers and host alternate versions of Gazebo in a separate PPA. This adds complexity for the infra team and for users compared to the status quo.
Alternative considered: follow a more ROS-like approach by installing to a collection-specific prefix (such as /opt/gz/jetty) and including the collection name in the debian package names (gz-jetty-libutils-dev / libgz-jetty-utils-dev / jetty-libgz-utils-dev).
Alternative considered: expect users to build alternate versions of Gazebo from source in a colcon workspace instead of installing from binaries.
One Homebrew formula shall be defined without a major version; versioned formulae may be defined with an @ character preceding the version number
brew install gz-utils
brew install gz-utils@3
Python import statements should not include the package major version. For example: import gz.math9 should instead be import gz.math
Not all instances of a string containing a package name with major version necessarily need to be changed. For example, release branch names (like gz-utils3) and gazebodistro files (like gz-utils3.yaml) may be ok as is.
Edit: an amended version of this proposal (see #1244 (comment)) was implemented.
Background
Currently we include the major version number of a Gazebo package in its package name. This allows multiple versions of packages to be installed side-by-side but induces churn each year when releasing new versions and when users upgrade to new versions.
Proposal
Remove the major version from Gazebo package names, including the following places:
The first argument to cmake
project()invocations in the root CMakeLists.txt should not include the major version number. For example: project(gz-utils4 VERSION 4.0.0) should instead beproject(gz-utils VERSION 4.0.0)The
//package/namefield in package.xml files should not include the major version number. For example:<name>gz-utils4</name>should instead be<name>gz-utils</name>The major version number should not be used when finding a package with cmake’s
find_package()function. For example: find_package(gz-utils4 REQUIRED COMPONENTS log) should instead befind_package(gz-utils REQUIRED COMPONENTS log)EDIT 2025-02-27: Since eliminating the major version from thefind_packagestatements can allow incompatible versions to be found without generating a configuration error, it is recommended to adopt a unified branch naming convention for all packages in a given collection (see Proposal: name branches consistently for each collection #1273). The ease of comparing branch names should mitigate the loss of configuration errors.find_packageargument, likefind_package(gz-utils 4 REQUIRED COMPONENTS log). While this retains the strict versioning, it is functionally equivalent to the existing convention with extra whitespace and retains the undesired churn.The debian package names should not include the major version:
sudo apt install libgz-utils-devEDIT 2025-02-27: a consequence of these changes is that multiple versions of a gazebo package can no longer be installed side-by-side in the same prefix. Furthermore if package names likelibgz-utils-devare used, multiple versions of gazebo binaries cannot be hosted in the same apt repository. As such, only one Gazebo collection should be supported on a given debian distribution.libgz-utils4-dev) with conflicts between different versions of the same package. Still only one version may be installed at a time, but they can be hosted in the sameaptrepository.libgz-jetty-utils-dev). Or do both, with the collection-named binaries as aliases of the packages with version numbers./opt/gz/jetty) and including the collection name in the debian package names (gz-jetty-libutils-dev/libgz-jetty-utils-dev/jetty-libgz-utils-dev).One Homebrew formula shall be defined without a major version; versioned formulae may be defined with an @ character preceding the version number
brew install gz-utilsbrew install gz-utils@3Python import statements should not include the package major version. For example: import gz.math9 should instead be
import gz.mathNot all instances of a string containing a package name with major version necessarily need to be changed. For example, release branch names (like
gz-utils3) and gazebodistro files (like gz-utils3.yaml) may be ok as is.Alternatives considered
Continue with the current naming scheme.