-
Notifications
You must be signed in to change notification settings - Fork 4.9k
Add missing RIDs for all supported OSes #26439
Conversation
@@ -111,6 +118,12 @@ | |||
<Versions>16.04;16.10</Versions> | |||
<TreatVersionsAsCompatible>false</TreatVersionsAsCompatible> | |||
</RuntimeGroup> | |||
<RuntimeGroup Include="ubuntu"> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why aren't these versions just added to the 16.x versions of Ubuntu?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Because of how the file was originally structured. It's using <TreatVersionsAsCompatible>false</TreatVersionsAsCompatible>
and has the ubuntu releases are compatible on major versions
comment. So I assume it's split to maintain that.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actually TreatVersionsAsCompatible=false makes all versions independent. The reason for the split between 14+15 and 16 was that 16 added a new architecture: arm64
. Since you aren't adding a new arch you can just include this with the 16.x versions. You can try it and examine the diff to prove that it doesn't make a difference in the generated files.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ericstj I'll update the PR with that change then.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also I think that comment ubuntu comment about major versions is incorrect 🙁. I double checked and this was true before my change to autogenerate as well. If you'd like you can delete it or correct it to say all ubuntu versions are independent.
@richlander @Petermarcu @leecow can you guys please take a look to see if there are other distro's or versions we need to add to the RID graph?
master branch is the correct one at this point. |
Possibly too soon to ask, but what are the odds of these changes also making it into a 2.0.x servicing release? It would be nice to not have to wait for 2.1. |
<TreatVersionsAsCompatible>false</TreatVersionsAsCompatible> | ||
</RuntimeGroup> | ||
|
||
<RuntimeGroup Include="sles"> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Make sure you are intentionally treating these as independent versions, eg: 12.2 shouldn't import 12.1. If that shouldn't be true then remove <TreatVersionsAsCompatible>false</TreatVersionsAsCompatible>
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What should I be investigating to determine if they are "compatible" or not? It's not clear to me what that distinction is based on.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is related to my question below for Eric and Wes. Would be great if we could simply define sles 12. This is how the distro owners think of the major version 'band'. 12.2 is actually "12 SP2" and comes with the inherent compat promises of a service pack. FWIW SP3 is the latest SLES release.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In the past we've left it up to the folks who know the most about the distros (ideally contributors to those). For example: red hat goes out of there way to make their minor releases compatible across for a single major version (see https://access.redhat.com/articles/rhel-abi-compatibility), windows does so across all versions, whereas others like ubuntu do not and we've had a history of breaks when folks try to reuse binaries.
Ultimately its a bit of a loaded question: what is compatibility? You can read through issues that mention binary compatibility
to see some of the past discussion on the topic. My preference is to opt for compatibility since it enables something that is otherwise not possible, see https://github.com/dotnet/corefx/blob/master/pkg/Microsoft.NETCore.Platforms/readme.md#version-compatibility.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It appears that SLES has a similar compatibility guarantees for releases within a major version: https://www.suse.com/partners/isv/porting_and_migration/
I'll remove the <TreatVersionsAsCompatible>false</TreatVersionsAsCompatible>
line.
@weshaggard , @ericstj - Why do we need to include minor versions for rhel, mint, opensuse and sles? If there's not technical reason for doing so, treating them in a manner similar to debian.8 and debian.9 (which also ship regular minor updates) would limit the churn to this file and conceivably make things a bit more resilient. @bording - agreed that this should also go to 2.0. Couple of version comments Fedora 25 went eol last month |
@leecow Because they were once supported, I felt it made sense to add the missing ones from your list for completion vs. having a strange gap in the versions. Even if a distro goes out of support, would you ever remove items from the runtime file? It seems like removing something could break people, for example if someone's authored a NuGet package that has per-RID content. |
Nope, only from our build and test infrastructure. Anything related to public functionality would remain intact. |
cc @joshfree |
"ubuntu-x86" | ||
] | ||
}, | ||
"ubuntu.17.10-x86-corert": { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could you also go ahead and add ubuntu.18.04 proactively?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Similarly if you wouldn't mind, Fedora 28 and Mint 19 all come out around the same time and should be included in the 2.1 RID graph
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sure, I can add those. Any others that make sense to add now?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @bording. With those additions you'll have added all of the supported distro versions through the ~May 2018 time frame.
Near the end of 2018, we'll need to add the supported H2 2018 releases {Ubuntu18.10 / Mint 19 / SLES 15 / Fedora 29} to the master branch around that time; as well as stand up the appropriate build and test infra for those releases.
I've pushed up changes that I believe address all comments so far. While looking into SLES compatibility guarantees, I realized there is a similar issue for debian. The way I've added version 9 means they are being treated as compatible. However, I can't find anything specific online to indicate if this is okay or not like I could for SLES. Does anyone know how I should handle that one? I see that https://www.microsoft.com/net/learn/get-started/linuxdebian has separate package feeds for them, so does that mean it's best to treat them as separate? |
<RuntimeGroup Include="linuxmint.19"> | ||
<Parent>ubuntu.18.04</Parent> | ||
<Architectures>x64</Architectures> | ||
<Versions></Versions> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No versions? I wonder if we should be listing the versions as 18, 18.1, 18.2, then 19 (in a seperate item). I can't recall why I put the major version in the include statement initially. If it works without a diff move the the major versions to the version metadata.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ericstj I did try doing it that way, but because there are different parents for each major, it failed when trying to create the "linuxmint" RID.
I could go ahead and add some versions, but I didn't do that initially because it felt it was speculating too far into upcoming releases.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see. That's why I must have done it, I remember now. Can we add a comment here to explain? I'm fine not adding 'dot' versions if none exist yet (not even 0?).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The first release of a linux mint major is just the major, without a 0, at least for all the recent versions: https://en.wikipedia.org/wiki/Linux_Mint_version_history
I'll add a comment to explain.
I don't know of any plans to take this into the 2.0 branch at this point. @joshfree do we need any of these RID updates for 2.0 servicing? However assuming we get https://github.com/dotnet/core-setup/issues/1846 addressed you can simply reference the latest prerelease version of Microsoft.NETCore.Platforms package in your application to get the graph merged in. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@weshaggard I should be able to add the comment some time today, but I do still have the outstanding question about debian compatibility that I'd like to get an answer on before this gets merged. |
@bording - regarding the Debian 9 vs 8 compatibility. I am not sure about one thing. I know there was a change in OpenSSL libraries. Debian 8 had libssl.so.1.0.0 while Debian 9 has libssl.so.1.0.2 (I am talking about the SO name). So there is no official libssl.so.1.0.0 package for Debian 9 and apps / shared libraries that are linked against it would break unless someone installs a libssl.so.1.0.0 from the Debian 8 (which is possible). W.r.t. that, do you regards Debian 8 and 9 still as compatible or not? |
@janvorli I know for the scenario that lead me to investigate these missing RIDs in the first place, that would be enough for me to consider them not compatible because I'd need to ship separate libraries for each distro. Based on that, I think I should adjust the PR to not treat them as compatible. Anyone have an objection? |
Sounds good to me. We essentially need one primary example of an incompatibility that requires us to pick different assets to deploy to mark them as incompatible. |
I've now made all the changes that I'm aware needed to be made. @ericstj Let me know if the comments I added for linux mint are okay or if there's something you'd like me to tweak.. |
@@ -61,7 +62,7 @@ | |||
<RuntimeGroup Include="linuxmint.19"> | |||
<Parent>ubuntu.18.04</Parent> | |||
<Architectures>x64</Architectures> | |||
<Versions></Versions> | |||
<Versions></Versions><!-- Empty because there are no point releasse yet --> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
typo: releasse -> releases
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oops! will fix.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pushed up a revised commit.
test Windows x64 Debug Build |
CI legs failing with known issue https://github.com/dotnet/corefx/issues/26531. |
Thanks a lot for your help @bording in updating the RIDs. |
So what's the final verdict for including the runtime.json updates in a servicing release? I know earlier that @leecow thought it should happen. |
* Add missing versions * Add missing RID * Update runtime files * Address PR feedback for ubuntu RID * Treat minor versions of SLES as compatible * Add upcoming releases * Move SLES definition to maintain alphabetization of file * Treat debian versions as not compatible * Add linux mint comments Commit migrated from dotnet/corefx@6bfbf57
This adds all of the RIDs that were identified as missing in #23699. This covers all of the OSes listed in https://github.com/dotnet/core/blob/master/release-notes/2.0/2.0-supported-os.md
In addition to there being versions missing for existing RIDs, there was no RID defined for SUSE Enterprise Linux at all, so I added that as well, mirroring the
opensuse
section.@weshaggard I wasn't sure what the correct branch for this should be, so I went ahead and based it against master. Let me know if it should be something else, and I'll fix it up.