Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update REP3 for Melodic Morenia #139

Merged
merged 11 commits into from
Feb 2, 2018
Merged

Update REP3 for Melodic Morenia #139

merged 11 commits into from
Feb 2, 2018

Conversation

clalancette
Copy link
Contributor

rep-0003.rst Outdated
- C++11
- Python 2.7

- Python 3.6 not required, but testing against it is recommended
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some targeted platforms ship Python 3.5 (e.g. debian stretch). So this could be updated to Python >=3.5.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, thanks. I forgot to double-check that on Stretch. I'll change it to your suggestion.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe the Python 3 line could be moved into the table below?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the reason it is here and not in the table is because it is a language, and not a library/tool. But if we think moving it into the below table, or a separate table for the languages make sense, I could change to that instead.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

😭


Build System Support:

- Same as Indigo
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This may change depending on the decision of supporting the ament build system or not in ROS1

rep-0003.rst Outdated
+---------+---------------+----------------+----------------+-----------+
| Ogre | 1.9 | 1.9! | 1.9 | 1.9! |
+---------+---------------+----------------+----------------+-----------+
| OpenCV | 3.3* | 3.3* | 3.3* | 3.3* |
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Last year we forward ported the version of the last released ROS distro to avoid making assumption on what the community will release. I'd suggest putting 3.2 here and see if @vrabaud and/or other in the community releasing OpenCV in Fedora manifest interest in releasing 3.3.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was basing the 3.3 version mostly on this discussion: https://discourse.ros.org/t/opencv-3-3/2674/6 . I guess we'll let @vrabaud comment and then we can change it/fix it accordingly.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3.2 is from Dec 2016. It would be sad to be more than one year behind. 3.3 actually has very serious support for deep learning (not in contrib anymore) and I guess robotics will use more and more of that. 3.4 will be out in December 2017
I hate to say this as it will make me the maintainer for a few more years but we should go with our own 3.4 binaries ....

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vrabaud Thanks for the response. I'll change the PR to say 3.4 for now based on your recommendation. If things change, we can change this later on.

rep-0003.rst Outdated
+---------+---------------+----------------+----------------+-----------+
| CMake | 3.9.1 | 3.9.1! | 3.7.2 | 3.9.3! |
+---------+---------------+----------------+----------------+-----------+
| Gazebo | 7.5.0 | 7.5.0! | 7.3.1 | 8.1.1! |
Copy link
Contributor

@mikaelarguedas mikaelarguedas Oct 24, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@j-rivero do you think Gazebo 8 9 will make it into Ubuntu 18.04 ? If not, will gazebo7 be maintained until 2023 ?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mikaelarguedas do you mean to ask about Gazebo 9.0? 8.0 isn't an LTS afaik

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indeed I meant Gazebo 9 😖, thanks @IanTheEngineer for catching it. I'll edit the previous comment accordingly

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gazebo 9 has a big number of useful functionality compared to 7. It'd be really sad to stay with 7 in Melodic. But I know it depends on the development status and decision about Gazebo 9 target platforms (which I couldn't find).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@j-rivero Gentle ping, any thoughts on the versions of Gazebo here, and what we can expect will be supported for the life of Melodic?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We are working for getting gazebo9 into Ubuntu 18.04 but I can not say yes or no at this moment since there is a good bunch of packages that need to go through the Debian review process, which takes an unpredictable amount of time. The different supporting periods are listed in the gazebo webpage.

rep-0003.rst Outdated
Required Support for:

- Ubuntu Artful (17.10)
- Ubuntu B (18.04)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bionic Beaver it is.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ha, nice :). I'll update the documentation accordingly.

@mikaelarguedas
Copy link
Contributor

mikaelarguedas commented Oct 24, 2017 via email

rep-0003.rst Outdated

Targeted Languages:

- C++11
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we now change the motivation and/or recommendation about using C++11 in desktop-full packages? Since we have coverage on support, is there harm in starting to use C++11 features in desktop-full?

Copy link
Contributor Author

@clalancette clalancette Oct 26, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, I'm not really familiar with the history. Is the above note saying that C++11 is targeted not enough? Is there an exception for desktop-full?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is saying that all packages should be able to compile with the C++11 flag.

There is a C++ section below that covers use of modern C++ in APIs. I think that's what @wjwwood is referring to.
There are a couple related threads on discourse [1] [2]

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the pointers. Now that C++11 (or newer) is going to be the default standard of the compiler for all of the supported platforms, my feeling is that it is safe to allow C++11 features as part of the desktop-full API. That's not to say we will change old APIs, just that new ones are free to use it. Hopefully others from the community can chime in here and express their concerns or support for this change.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now that C++11 (or newer) is going to be the default standard of the compiler for all of the supported platforms, my feeling is that it is safe to allow C++11 features as part of the desktop-full API. That's not to say we will change old APIs, just that new ones are free to use it.

That is already exactly the case for Kinetic and Lunar afaik.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quoting https://gcc.gnu.org/gcc-6/changes.html

The default mode for C++ is now -std=gnu++14 instead of -std=gnu++98.

Debian Stretch has 6.3.0, Artful has g++ 7.2.0, all others newer

So adding -std=c++11 will be a "downgrade" from default compilation mode for all supported platforms. I vote for having full "permission" for C++11 or even better 14 in all public apis and dropping whatever boost etc is possible

Copy link
Contributor Author

@clalancette clalancette Nov 6, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@simonschmeisser Thanks for the link, that is helpful. I also confirmed empirically that gcc 6+ defaults to having (at least) C++11 features. Given that all of Ubuntu Artful, Bionic, Debian Stretch, and Fedora 28 are going to have versions of gcc newer than 6, that's a pretty good start. One potentially complicating factor here is clang++ on macOS, which, as of High Sierra, prints a warning when using C++11 features without passing -std=c++11. It actually still succeeds compilation, but the warning might be annoying for the macOS-porting portions of the community. If we don't care too much about macOS, then I would suggest we go with option number 1 from @wjwwood's post (just use the compiler default). If we do care about the warnings on macOS, then I think we'll have to go with something like option 2. Thoughts?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, doing a bit more digging on macOS, it seems like if we have the core packages export a -Wno-c++11-extensions flag, then High Sierra won't complain, but will compile c++11. That suggests to me that we should do 1 (use the compiler defaults), with the additional caveat that the core packages would need to ensure that they export the right flag for downstream users not to complain on macOS. Any further ideas here?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I actually think this might not be sufficient, because IIRC some include statements will not work without the -std=c++11 flag set, e.g. maybe #include <memory> or #include <functional>?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, you are right about that, I just double checked. Without the -std=c++11 flag, most things in clang work, but it doesn't know how to parse functional stuff. So we'll definitely need to provide the flag for macOS to work.

From this, then, I'd suggest that we follow @wjwwood 's option 2, and provide a std=c++11 flag down in one of the core packages so basically everything inherits it. This may be a "downgrade" from the default for certain compilers (the newer gcc ones which have C++14 standard), but packages higher up in the stack can always override it. If everyone is OK with that idea, then I'll update the motivation section to be a lot clearer on this point, and say that we allow C++11 features to be used basically everywhere, including public APIs.

Recommended Support for:

- Debian Stretch
- Fedora 28
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we also target fedora 27 ?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd suggest not. With their 13 month support cycle. If we release in May, we'll only get ~6 months of support.

Copy link
Contributor

@mikaelarguedas mikaelarguedas Oct 27, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's accurate.
Following that logic, should we also drop artful from the list?
With the Ubuntu 9-month support cycle, if we release end of may we'll only get ~2 months of support.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's certainly something we could consider. Ubuntu being our main development distro is a little different though. Artful will likely be what we do any testing on in the intermediate time.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree with @tfoote about not support F27; the lifecycle is too short. I would be in favor of dropping artful for the same reasons, but I'd like to get opinions from the community on that.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think historically the goal was to target all distros and not skip one, but it seems just unnecessary effort to support distros that we don't support for more that a few months. For Lunar we dropped Yakkety before even having the most used packages released. I would be in favor of dropping both F27 and Ubuntu 17.10

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1 to skip artful, no one will use it anyway

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is a standing document about the goals and the rational (see http://wiki.ros.org/Distributions/ReleasePolicy). Until that is revised and agreed upon we should stick to it which implies supporting Artful for the time frame it is available.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We discussed this, and unless there is a strong reason to not support artful, we are going to support it to conform to the Release Policy. As @tfoote suggests above, most of our development will probably be on artful anyway.

rep-0003.rst Outdated
- C++11
- Python 2.7

- Python >= 3.5 not required, but testing against it is recommended
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since this is a soft testing requirement anyway, should we recommend Python 3.6? Python 3.6 was released in December 2016, and will be receiving security updates through December 2021.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, this REP started with 3.6 but given that one of the targeted platforms (Debian Stretch) ships python 3.5 we changed it to 3.5 and above (#139 (comment))

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, fair enough. I hadn't gone through the collapsed comments :/ Thanks!

@mje-nz
Copy link

mje-nz commented Nov 2, 2017

Would this be an appropriate time to update the "Rationale" section?

rep-0003.rst Outdated
- C++11
- Python 2.7

- Python >= 3.5 not required, but testing against it is recommended
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ubuntu Bionic is aiming to have only Python 3.6 in the default install; perhaps testing on Python 3 should be required?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The current plan is that ROS targets Python 2 so with the ROS Debian packages Python 2.7 would be installed. The fact that only Python 3.6 is present on a bare installation is not relevant here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While it would be nice to completely support Python 3, I don't think that is going to be a reasonable amount of effort in the timeframe we have for Melodic. So I agree with @dirk-thomas that we'll just rely on Python 2 being pulled in when doing package installations, and continue to "recommend" support for Python 3.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this topic we should consider what Ubuntu is doing with Python 2 support (see http://news.softpedia.com/news/ubuntu-devs-work-on-demoting-python-2-to-universe-repo-for-ubuntu-18-04-lts-518926.shtml). While we can still use it it imo increases the "pressure" to consider moving forward or at least come up with a plan for doing so.

rep-0003.rst Outdated
+---------+---------------+----------------+----------------+-----------+
| Ogre | 1.9 | 1.9! | 1.9 | 1.9! |
+---------+---------------+----------------+----------------+-----------+
| OpenCV | 3.4* | 3.4* | 3.4* | 3.4* |
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, just thought about something: having the system version would help with people that have NVidia versions of OpenCV right ? Also, something I've often heard is that the OpenCV dependency is too big as it is compiled with the GUI (Qt), the image/video decoders and that brings in a lot of dependency. Debian/Ubuntu has a proper split of OpenCV.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As it currently stands, Ubuntu Artful has OpenCV 3.2, Debian Stretch has OpenCV 2.4.9, and Fedora 26 has OpenCV 3.2. Projecting forwards, Ubuntu Bionic will have OpenCV 3.2+, and Fedora 28 will have OpenCV 3.2+. This means that we could say that Melodic packages must target an OpenCV 3.2 "API", but also provide additional, newer packages for the distributions (which would be required on Debian Stretch). That way, users could choose whether they use the system versions of the packages, or the ones provided by ROS. Does that make sense? Are there bad pitfalls in an approach like that?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vrabaud Gentle ping, what do you think about my previous proposal?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ROS package is actually a bloom/catkin package. Not a .deb.
Therefore, people have to stick to the version given by ROS. We're already at 3.4 almost in Lunar. Getting back to 3.2 would be a downgrade for people.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vrabaud Thanks. I think we came to that conclusion as well, so we ended up sticking with 3.4 for Melodic.

Signed-off-by: Chris Lalancette <clalancette@openrobotics.org>
Signed-off-by: Chris Lalancette <clalancette@openrobotics.org>
Signed-off-by: Chris Lalancette <clalancette@openrobotics.org>
Based on feedback from Vincent Rabaud.

Signed-off-by: Chris Lalancette <clalancette@openrobotics.org>
Signed-off-by: Chris Lalancette <clalancette@openrobotics.org>
Signed-off-by: Chris Lalancette <clalancette@openrobotics.org>
Signed-off-by: Chris Lalancette <clalancette@openrobotics.org>
@clalancette
Copy link
Contributor Author

clalancette commented Jan 2, 2018

I've updated the language here to clarify our stance on C++ and Python. Please take another look and suggest improvements to the wording.

rep-0003.rst Outdated
starting with Melodic Morenia are highly encouraged to support both Python 2.7
and Python 3.5. During the development of Melodic there will be work undertaken
to support rosdep keys for both Python 2 and Python 3 so ROS package developers
can more easily test with either version of Python.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I absolutely agree with the paragraph. Before this can be merged we need to make sure that we are actually committing to do this.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Not sure we should mention what part of the work will be done during Melodic release cycle, as the infrastructure work for python2 and 3 support will likely be more involved than just providing rosdep keys.
Also I wouldnt restrict to Python 3.5 here as most targeted platform will have 3.6

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, I'll change the wording to "3.5 or greater".

rep-0003.rst Outdated
then remove the old APIs in a subsequent release.

ROS Melodic is also compiler-agnostic, so no use of compiler-specific features is allowed
without proper use of macros to allow use on other platforms.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this apply only to ROS Melodic ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, but there is similar wording in the "Lunar and earlier" section below. I'll see about combining them so there is less duplication.

Signed-off-by: Chris Lalancette <clalancette@openrobotics.org>
Also change it so that it is more clear that there is work beyond
rosdep keys needed to enable Python 3 support.

Signed-off-by: Chris Lalancette <clalancette@openrobotics.org>
Signed-off-by: Chris Lalancette <clalancette@openrobotics.org>
Copy link
Member

@tfoote tfoote left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1 though we may need to revise opencv3

@mikaelarguedas
Copy link
Contributor

though we may need to revise opencv3

I'm not sure what this implies, does revise means change it for a lower version ? or that we may bump it in the future?

Signed-off-by: Chris Lalancette <clalancette@openrobotics.org>
@clalancette
Copy link
Contributor Author

As discussed in chat, d665be4 is a small commit to put one sentence per line. No change in content.

@clalancette
Copy link
Contributor Author

I'm going to merge this now. If there are any further comments, feel free to leave them here, and we can address them in a follow-up PR. Thanks for the feedback and discussion.

@clalancette clalancette merged commit a868547 into master Feb 2, 2018
@clalancette clalancette deleted the rep3_melodic branch February 2, 2018 15:40
@IanTheEngineer
Copy link
Contributor

@clalancette according to this doc, Melodic will target Gazebo 7.x.x. Is that the case, or will Melodic use Gazebo 9.x.x?

@clalancette
Copy link
Contributor Author

@clalancette according to this doc, Melodic will target Gazebo 7.x.x. Is that the case, or will Melodic use Gazebo 9.x.x?

@IanTheEngineer See #160, where we are updating this to Gazebo 9 :).

@IanTheEngineer
Copy link
Contributor

aha! Missed that PR. Thanks :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.