Based on these thoughts we propose the following solution (are you ready for it ?):
- we will release packages individually.
- we will have “meta-packages” which are groups of packages that can be installed by named aliases easily, but these will simply be content free packaging decisions, not source controlled content that must agree with the package dependency.
- there will be one xml file per package (the manifest.xml) which will have all the relevant meta data, dependencies, and information such as plugin declarations and possibly interfaces in the future.
Proposed Solution:
Based on these thoughts we propose the following solution (are you ready for it ?):
- we will release packages individually.
- we will have “meta-packages” which are groups of packages that can be installed by named aliases easily, but these will simply be content free packaging decisions, not source controlled content that must agree with the package dependency.
- there will be one xml file per package (the manifest.xml) which will have all the relevant meta data, dependencies, and information such as plugin declarations and possibly interfaces in the future.
--
You received this message because you are subscribed to the Google Groups "ROS Buildsystem Special Interest Group" group.
To post to this group, send email to ros-sig-b...@googlegroups.com.
To unsubscribe from this group, send email to ros-sig-buildsy...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
Based on these thoughts we propose the following solution (are you ready for it ?):
- we will release packages individually.
- we will have “meta-packages” which are groups of packages that can be installed by named aliases easily, but these will simply be content free packaging decisions, not source controlled content that must agree with the package dependency.
- there will be one xml file per package (the manifest.xml) which will have all the relevant meta data, dependencies, and information such as plugin declarations and possibly interfaces in the future.
Proposed Solution:
Based on these thoughts we propose the following solution (are you ready for it ?):
- we will release packages individually.
- we will have “meta-packages” which are groups of packages that can be installed by named aliases easily, but these will simply be content free packaging decisions, not source controlled content that must agree with the package dependency.
- there will be one xml file per package (the manifest.xml) which will have all the relevant meta data, dependencies, and information such as plugin declarations and possibly interfaces in the future.
--
You received this message because you are subscribed to the Google Groups "ROS Buildsystem Special Interest Group" group.
To post to this group, send email to ros-sig-b...@googlegroups.com.
To unsubscribe from this group, send email to ros-sig-buildsy...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/ros-sig-buildsystem/-/LvLwBoLt2-wJ.
Proposed Solution:
Based on these thoughts we propose the following solution (are you ready for it ?):
- we will release packages individually.
- we will have “meta-packages” which are groups of packages that can be installed by named aliases easily, but these will simply be content free packaging decisions, not source controlled content that must agree with the package dependency.
- there will be one xml file per package (the manifest.xml) which will have all the relevant meta data, dependencies, and information such as plugin declarations and possibly interfaces in the future.
Yes, variants are actually meta-packages themselves - both will be stored in the DISTRO.yaml on GitHub.
> Will there be an 1-to-n or an n-to-m relationship between meta-packages and packages?
The relationship is arbitrary: each meta-package can depend on N packages, a package can be part of M meta-packages and meta-packages can also depend on other meta-packages.
> Does that mean VCS repositories will have to be split up to have one per package (all packages to github)?
Absolutely not. With the large number of packages that is not feasible. If multiple packages are stored in the same repository it is a bit more difficult for a user to checkout only that package
(without the other packages of that repository). But that should not be an issue.
> Currently on can create an overlay of e.g. the navigation stack, and remove that overlay by removing the "navigation" folder. IN your scenario, I assume we can get a rosinstall for the meta-package
> "navigation" into out workspace. How about removing that meta-package from the workspace?
rosinstall currently gets its information form a .rosinstall file and does not rely on the DISTRO.yaml file. So there is no notion of a meta-package for rosinstall.
In a catkin workspace all packages overlay packages with the same name in parent workspaces (as it is in rosbuild).
New packages can be added by putting them in the workspace folder and removed by deleting the folder again.
With a global build folder per workspace a `make clean` would be necessary to remove all artifacts (this was already discussed in another topic).
> Will the meta-packages be managed like variants, centralized?
Yes, variants are actually meta-packages themselves - both will be stored in the DISTRO.yaml on GitHub.To me that would be a CON:
The concept of centralized meta packages depends on Willow Garage / OSRF infrastructure, which is less flexible than decentralized models, such as meta-package.xml defining a meta-package without the restrictions of a stack.xml.
I will also guess that meta-packages will not declare dependencies to other meta-packages, but instead only depend on something like the union of the package dependencies (not sure how union works with versioned dependencies). So where before a stack might depend on 5 other stacks, now a meta-package will depend on 50 packages. That's more difficult to proof-read.
> Will there be an 1-to-n or an n-to-m relationship between meta-packages and packages?
The relationship is arbitrary: each meta-package can depend on N packages, a package can be part of M meta-packages and meta-packages can also depend on other meta-packages.
To me that means we lose meta-information.
Consider the overview over stacks that a tool like the rosgui plugin Ros Package graph. The structural information is lost with the lack of stacks. Should this lack of structure be listed as a CON to the proposal? If meta-packages had an enforced 1-to-n restriction (each package must name one parent meta-package), the structure could be established. Also, again, by letting packages maintain their parent meta-package in the manifest, meta-packages can be established in a decentralized and automated fashion (with the caveat that typos may cause undesired meta-packages).
> Does that mean VCS repositories will have to be split up to have one per package (all packages to github)?
Absolutely not. With the large number of packages that is not feasible. If multiple packages are stored in the same repository it is a bit more difficult for a user to checkout only that package
(without the other packages of that repository). But that should not be an issue.
Does that mean if multiple packages live in the same SCM subtree (e.g. git repo), that they will still need a common CMakelists.txt in the subtree root to be catkin compliant?
> Currently on can create an overlay of e.g. the navigation stack, and remove that overlay by removing the "navigation" folder. IN your scenario, I assume we can get a rosinstall for the meta-package
> "navigation" into out workspace. How about removing that meta-package from the workspace?
rosinstall currently gets its information form a .rosinstall file and does not rely on the DISTRO.yaml file. So there is no notion of a meta-package for rosinstall.
AFAIK, the script "http://packages.ros.org/cgi-bin/gen_rosinstall.py" generates rosinstall data from the distro.yaml, and has a "variant" parameter
In a catkin workspace all packages overlay packages with the same name in parent workspaces (as it is in rosbuild).
New packages can be added by putting them in the workspace folder and removed by deleting the folder again.
With a global build folder per workspace a `make clean` would be necessary to remove all artifacts (this was already discussed in another topic).
I am talking about removing 10 out of 100 packages in a workspace, where the developer has no overview of which of the 100 packages are the 10 that belong to the meta-package he wants to remove. Currently to get rid of the "navigation" stack, a user removes the folder named "navigation". The new proposal means the user needs to find out what packages are part of navigation, and remove them one by one. This unless meta-packages are checked out as a single folder, or some other tool to help exists.
--
You received this message because you are subscribed to the Google Groups "ROS Buildsystem Special Interest Group" group.
To post to this group, send email to ros-sig-b...@googlegroups.com.
To unsubscribe from this group, send email to ros-sig-buildsy...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/ros-sig-buildsystem/-/IVjBGpM_0xsJ.
I've added some responses below:On Thu, Aug 9, 2012 at 2:00 AM, tkruse <tibo...@googlemail.com> wrote:
> Will the meta-packages be managed like variants, centralized?
Yes, variants are actually meta-packages themselves - both will be stored in the DISTRO.yaml on GitHub.To me that would be a CON:
The concept of centralized meta packages depends on Willow Garage / OSRF infrastructure, which is less flexible than decentralized models, such as meta-package.xml defining a meta-package without the restrictions of a stack.xml.To update the rosdistro for your own meta-package it's just a pull request away to get it into the mainline one now. We've had great responses to updating the rosdeps that way. Also all the toolchain is now parameterized to allow you to fork the rosdistro and use your own version if you'd like, or extend it and add it to your sources.list listing. Another viewpoint is that part of the value of packaging is that you are making things common and facilitating a shared ontology.
I will also guess that meta-packages will not declare dependencies to other meta-packages, but instead only depend on something like the union of the package dependencies (not sure how union works with versioned dependencies). So where before a stack might depend on 5 other stacks, now a meta-package will depend on 50 packages. That's more difficult to proof-read.
There's no reason that a variant can't depend on another one. That's how things work at the moment. See the bottom of fuerte.rosdistro: https://code.ros.org/svn/release/trunk/distros/fuerte.rosdistro
> Will there be an 1-to-n or an n-to-m relationship between meta-packages and packages?
The relationship is arbitrary: each meta-package can depend on N packages, a package can be part of M meta-packages and meta-packages can also depend on other meta-packages.
To me that means we lose meta-information.
Consider the overview over stacks that a tool like the rosgui plugin Ros Package graph. The structural information is lost with the lack of stacks. Should this lack of structure be listed as a CON to the proposal? If meta-packages had an enforced 1-to-n restriction (each package must name one parent meta-package), the structure could be established. Also, again, by letting packages maintain their parent meta-package in the manifest, meta-packages can be established in a decentralized and automated fashion (with the caveat that typos may cause undesired meta-packages).
Requiring one "primary" meta-package is restrictive. The packageA may be a primary component of the meta-packageA. But it may also be a primary component of the meta-packageB.
Also I would argue that requiring a developer of a library to rerelease their package to change it's meta-packaging is broken as the meta-packaging is truely a packaging discussion, and should not bother the developer for a patch release.
> Does that mean VCS repositories will have to be split up to have one per package (all packages to github)?
Absolutely not. With the large number of packages that is not feasible. If multiple packages are stored in the same repository it is a bit more difficult for a user to checkout only that package
(without the other packages of that repository). But that should not be an issue.
Does that mean if multiple packages live in the same SCM subtree (e.g. git repo), that they will still need a common CMakelists.txt in the subtree root to be catkin compliant?No they will not require anything connecting them. We will need to upgrade rosinstall/vcstools to be able to specify subdirectories to checkout. It's a less efficient way to use DVCSs from the storage aspect, but we expect to be more efficient from a speed and effort of development viewpoint.
> Currently on can create an overlay of e.g. the navigation stack, and remove that overlay by removing the "navigation" folder. IN your scenario, I assume we can get a rosinstall for the meta-package
> "navigation" into out workspace. How about removing that meta-package from the workspace?
rosinstall currently gets its information form a .rosinstall file and does not rely on the DISTRO.yaml file. So there is no notion of a meta-package for rosinstall.
AFAIK, the script "http://packages.ros.org/cgi-bin/gen_rosinstall.py" generates rosinstall data from the distro.yaml, and has a "variant" parameter
Yes, that script is aware of rosdistro and variants, thus rosinstall is isolated from knowing about the distro/variants etc. We could add a feature to rosinstall to do subtractive merging based on subsets of rosinstalls pass as arguments. However, I expect a cleaner solution might be to
There's no reason that a variant can't depend on another one. That's how things work at the moment. See the bottom of fuerte.rosdistro: https://code.ros.org/svn/release/trunk/distros/fuerte.rosdistro
But that does away with the PRO argument: "maintainers no longer need to maintain the dual redundant dependency trees"
If variants are the new stacks, then maintaining variant interdependencies is a second dependency tree just as the stack dependency tree is.
> There's no reason that a variant can't depend on another one. That's how things work at the moment. See the bottom of fuerte.rosdistro:
> https://code.ros.org/svn/release/trunk/distros/fuerte.rosdistro <https://code.ros.org/svn/release/trunk/distros/fuerte.rosdistro>
>
>
> But that does away with the PRO argument: "maintainers no longer need to maintain the dual redundant dependency trees"
> If variants are the new stacks, then maintaining variant interdependencies is a second dependency tree just as the stack dependency tree is.
Maintainers only maintain package-to-package dependencies.
The information defining a variant include only a list of packages (or other variants) and are only for user convenience.
> Requiring one "primary" meta-package is restrictive. The packageA may be a primary component of the meta-packageA. But it may also be a primary component of the meta-packageB.
>
> You seem to mix up meta-package being primary to a package and a package being primary to a meta-packages.
> I am suggesting is that move_base should have a dedicated parent meta-package navigation, that does not exclude the possibility to define some other "uncle" meta-package containing move_base as well.
> However that relationship between move_base and navigation is stronger than that of other meta-packages.
> I am not sure myself how to shape this into a clean concept, I just see that dropping restrictions also drops helpful structure. And I still fail to see how steadily growing number of packages
> motivates having less structure to keep an overview.
The crucial point of the proposal is that there is nothing but packages.
Packages do NOT know about anything else than other packages they depend on.
On 09.08.2012 05:20, tkruse wrote:
> As I stated, the problem is merely for human readers. It may be more useful to a reader to read that one variant depends on 5 other variant than for reader to read a variant depends on 50 packages.
> The information is the same, but the presentation is different. Usability is one of the reasons people switched to rosbuild. I am not saying we should or should not do this, I am just saying whichever
> way we go needs to go into the review, so that people know exactly what they'll be getting and why.
As stated multiple times: variants can depend on other variants (and of course packages).
So it would be possible to have something like that in the distro.yaml file:
[...]
IMHO that looks very readable.
On Thursday, August 9, 2012 10:59:11 PM UTC+2, Dirk Thomas wrote:
It is always possible to just checkout the complete repository.
The con would be that it builds all packages in the workspace (which might be more than we actually need).
Does this also mean each corporate ROS community who develops non-open-source packages will have to create their own meta-packaging infrastructure and toolset, or will ROS provide tools to have a mix of company-internal distro.yaml mixed with the Willow Garage/OSRF one?
But that does away with the PRO argument: "maintainers no longer need to maintain the dual redundant dependency trees"
If variants are the new stacks, then maintaining variant interdependencies is a second dependency tree just as the stack dependency tree is.
--
You received this message because you are subscribed to the Google Groups "ROS Buildsystem Special Interest Group" group.
To post to this group, send email to ros-sig-buildsystem@googlegroups.com.
To unsubscribe from this group, send email to ros-sig-buildsystem+unsub...@googlegroups.com.
--
You received this message because you are subscribed to the Google Groups "ROS Buildsystem Special Interest Group" group.
To post to this group, send email to ros-sig-b...@googlegroups.com.
To unsubscribe from this group, send email to ros-sig-buildsy...@googlegroups.com.
With the deadline for the feature freeze coming up fast, we're working hard to implement most of what we're talking about as we talk about it.
One thing that would be really helpful would be suggestions of what form of solutions you would like to see as opposed to just objections to the current suggestion.
But that does away with the PRO argument: "maintainers no longer need to maintain the dual redundant dependency trees"
If variants are the new stacks, then maintaining variant interdependencies is a second dependency tree just as the stack dependency tree is.The current implementation I pointed to uses extends syntax such that you get the union of the packages. It's just a grouping, and you can set a group to include the contents of another group. And as the underlying packages contain all the dependency information, a variant does not need to worry about including all dependencies. So say we make a pr2_foo variant, it can just list pr2_x, pr2_y packages and pr2_bar meta-package. All the dependencies will be pulled in via the package dependencies of pr2_x, pr2_y, and the packages in pr2_bar if pr2_foo is installed. A clever implementaiton will even be able to handle circular dependencies, as it can just be the union of the packages in codependent variants. Thus it's not the same as maintaining a parallel dependency tree, you don't have to worry anything except listing the packages which provide the functionality desired.
As Dirk just asked if you can clarify what other information you'd like contained in the meta-packages that would help us understand how we might integrate it.
You cannot have a any variant (or meta-package) mention anything else than a package without creating a second tree (forest) of variants / meta-packages that needs maintaining.
Parsing more closely, I should recant and clarify.I should have said that meta-packages don't depend on other meta-packages for the sake of satisfying the dependencies of the packages below them.That is to say that if meta-package "Foo" includes a package "foo_node" that then depends on "laser_geometry" which lives in the "laser_pipeline" meta-package, "Foo" would not include the meta-package "laser_pipeline" as a dependency, but rather ignore it, and allow "foo_node"'s dependency tree to be sorted out automatically.
That is why meta-packages need explicitly named maintainers, doc URLs,
bug reporting URLs, and a deprecation mechanism for implementing
changes via tick-tock.
--
You received this message because you are subscribed to the Google Groups "ROS Buildsystem Special Interest Group" group.
To post to this group, send email to ros-sig-b...@googlegroups.com.To view this discussion on the web visit https://groups.google.com/d/msg/ros-sig-buildsystem/-/r2PRdxErDEwJ.
To unsubscribe from this group, send email to ros-sig-buildsy...@googlegroups.com.
Meta-packages should also have wiki pages (or some other doc URL).
> So other than a description, I do not see that much of a need to store data
> on
> meta-packages, I still think that packages and meta-packages are not enough
> to provide a good overview of what lives in the ROS ecosystem.
I was arriving at the opposite conclusion. With proper tools and
documentation, I think meta-packages might fill the hole left by
eliminating stacks. We need a way to mitigate this whole nightmare of
thousands of packages with no structure and no way for anyone to
understand what is available for code reuse. That was supposed to be
the main purpose of ROS.
Users should be able to distinguish *released* stacks from "wild
code".
> In a way I think it can be good to start out with minimalist concepts for
> now
> and expand later with concepts when we feel the pains that come with just
> having packages and meta-packages, since it seems to be up to opinions
> or tastes whether the benefit of more structure is worth the effort or not.
> That's better than introducing concepts now that have to be changed later.
I don't think what we have right now is good enough. We have lost
needed function without adequate substitutes.
On Sat, Aug 11, 2012 at 2:31 AM, tkruse <tibo...@googlemail.com> wrote:
>
> On Saturday, August 11, 2012 2:25:51 AM UTC+2, Jack O'Quin wrote:
>>
>> Meta-packages should also have wiki pages (or some other doc URL).
>
> According to Tully suggestion, they'll have wiki pages with names according
> to their names. Meaning an implicit doc URL. That's less effort to maintain
> than explicit URLs.
All that does is create lots of broken links to wiki pages.
Plus, the design should not force all documentation to ros.org.
But, saying the quality of catkin in Groovy does not matter because
few will use it is self-defeating.
On Sat, Aug 11, 2012 at 2:31 AM, tkruse <tibo...@googlemail.com> wrote:All that does is create lots of broken links to wiki pages.
>
> On Saturday, August 11, 2012 2:25:51 AM UTC+2, Jack O'Quin wrote:
>>
>> Meta-packages should also have wiki pages (or some other doc URL).
>
> According to Tully suggestion, they'll have wiki pages with names according
> to their names. Meaning an implicit doc URL. That's less effort to maintain
> than explicit URLs.
Plus, the design should not force all documentation to ros.org. If
people are willing to write and maintain documentation, let them put
it wherever they like. Github may be a reasonable choice for many.
--
You received this message because you are subscribed to the Google Groups "ROS Buildsystem Special Interest Group" group.
To post to this group, send email to ros-sig-b...@googlegroups.com.
To unsubscribe from this group, send email to ros-sig-buildsy...@googlegroups.com.
> To get higher adoption, I would love to see changes to catkin, mostly revert
> to rosbuild like separation of builds (maybe with an introduction of dedicated
> build groups),
> but also "moist" workspaces where both rosbuild and catkin packages are
> build in the
> right order with a single "rosmake" command.
But, who will implement that?
On Sun, Aug 12, 2012 at 3:37 PM, tkruse <tibo...@googlemail.com> wrote:
On Sunday, August 12, 2012 9:35:43 PM UTC+2, Jack O'Quin wrote:> On Sat, Aug 11, 2012 at 12:30 PM, tkruse <tibo...@googlemail.com> wrote:
>> Remember I suggested to keep meta-package names exactly as rosbuild stack
>> names.
On Sat, Aug 11, 2012 at 2:34 PM, Jack O'Quin <jack....@gmail.com> wrote:
> Will that be done in Groovy for all dry stacks, or just the wet ones?
> Will the indexer no longer include dry stacks from then on? If I want
> to create a new dry stack, will I have to ask Willow Garage to accept
> a distros.yaml pull request?
I'd like to see a description, a maintainer, a review status, doc URL,
a Trac URL. Some of those could be optional. An optional deprecation
status would be very helpful for tick-tock. People are free to create
meta-packages without those data. Then, I will know to avoid them.