Let's first take a look back into history. Before we had .NET Core, there was already the .NET Framework. This version of .NET worked great on Windows operating systems, but couldn't work on Linux or macOS. To solve this problem, Microsoft had to rewrite .NET from the ground up. They named this new product .NET Core. The first version was released back in 2016. It was the first version that could work natively on Windows and Linux. Making the hosting of .NET Web apps a whole lot easier and cheaper.
Since 2016 Microsoft has released multiple versions of .NET Core, from 1.0 to 6.0 rc1 today. In the following graph, you see the current version and future versions of .NET.
* Copied from MicrosoftAl fun and well these versions, but which one should I use?
Well, if you look closely at the graph you can see the word LTS at the top of the image. This stands for Long Term Support. It basically means that this version is being supported and patched for three years since it was released. At the moment .NET Core 3.1 version is the only one to have long term support.
So if you want to have a stable and proven version to develop on, I would suggest you choose .NET Core 3.1 over 5.0.
How easy is it to upgrade to a newer .NET Core version?
That really depends on the complexity of the application. The more code you have written, the longer it will take to make sure everything keeps working. Another thing to look at is the breaking changes between each version.
Here is a list of web pages to find the breaking changes for each new version: