diff --git a/_posts/2018-12-04-dotnet-core.markdown b/_posts/2018-12-04-dotnet-core.markdown index 4b84259ca..4091d72cb 100644 --- a/_posts/2018-12-04-dotnet-core.markdown +++ b/_posts/2018-12-04-dotnet-core.markdown @@ -24,35 +24,41 @@ Last year I started updating Greenshot so it works and uses the most recent vers * [Dapplo.Log](https://github.com/dapplo/Dapplo.Log) provides a simple logger for applications, this was build out of necessity and I hope to be able to delete this soon! * [Dapplo.Windows](https://github.com/dapplo/Dapplo.Windows) provides the low level APIs for Windows (Win32), which contain the logic to locate the windows and other information which Greenshot needs. -These projects build a base upon which we can quickly add new features, and fix existing. After going through Greenshot with a vacuum cleaner and a high pressure washer it should be easier for new developers to get acquainted to Greenshot and add new functionality. +These projects build a base upon which we can quickly add new features, and fix existing. After going through Greenshot with a vacuum cleaner and a high pressure washer it should be easier for new developers to get acquainted to Greenshot and add new functionality. And as soon as things get stable, there will be some documentation of writing your own add-ons. Greenshot goes dotnet core! --------------------------- -Although Microsoft dotnet core technology, which saw the light in June 2016, is platform agnostic, it has not been possible to use existing UI technologies in it. In May 2018, while working hard on getting things working on the latest .NET Framework version, Microsoft had an interesting announcement on Build 2018 which you can find [here](https://blogs.msdn.microsoft.com/dotnet/2018/05/07/net-core-3-and-support-for-windows-desktop-applications/) and a video [here](https://www.youtube.com/watch?v=spgI12ZEBcs). +Although the dotnet core technology, which saw the light in June 2016, is platform agnostic, it has not been possible to use existing UI technologies in it. In May 2018, while working hard on getting things working on the latest .NET Framework version, Microsoft had an interesting announcement on Build 2018 which you can find [here](https://blogs.msdn.microsoft.com/dotnet/2018/05/07/net-core-3-and-support-for-windows-desktop-applications/) and also in a video [here](https://www.youtube.com/watch?v=spgI12ZEBcs). -The announcement was just what I was waiting for! Microsoft demonstrated that with dotnet core 3.0 it will be possible to use the same UI technologies that Greenshot is currently using! Why is this so exiting? Although most reasons are explained in a second blog about dotnet core 3.0 which can be found [here](https://blogs.msdn.microsoft.com/dotnet/2018/10/04/update-on-net-core-3-0-and-net-framework-4-8/) I will try to translate this for our users. +The announcement was just what I was waiting for! Microsoft demonstrated that with dotnet core 3.0 it will be possible to use the same UI technologies that Greenshot is already using! Why is this so exiting? Although most reasons are explained in a second blog about dotnet core 3.0 which can be found [here](https://blogs.msdn.microsoft.com/dotnet/2018/10/04/update-on-net-core-3-0-and-net-framework-4-8/) I will try to translate this for our users. -One of the challenges with Greenshot was picking the version of the .NET Framework to run on, we were very conservative. The problem with the .NET Framework is that there is only one version on a Windows PC! So if we want to use the newest version, we force a lot of people to update and a lot of companies might not be able to do so with extensive testing their other applications. With dotnet core 3.0 this should be a thing of the past, we can provide our own version of dotnet core and other applications can use theirs side by side! +One of the challenges with Greenshot was picking the version of the .NET Framework to run on, we were very conservative and this limited our possibilities. The problem with the .NET Framework is that there can be only one version installed on a Windows PC! So if we want to use the newest version, we force a lot of people to update and a lot of companies might not be able to do so without extensively testing their other applications. With dotnet core this is a thing of the past, every application can provide their own version of dotnet core and multiple versions run side by side! -Although Greenshot is open source it needed the .NET Framework to run, but this isn't open source! Now with dotnet core which is maintained by the [.NET Foundation](https://dotnetfoundation.org), which is an independent organization which helps many open source .NET [projects](https://dotnetfoundation.org/projects), and one of them is dotnet core! When Greenshot can run on dotnet core, we would have the complete stack (well ~99%) run on Open Source technologies! +Although Greenshot is open source it needed the .NET Framework to run, but this isn't open source! The [.NET Foundation](https://dotnetfoundation.org), which is an independent organization which helps many open source .NET [projects](https://dotnetfoundation.org/projects), is the maintainer of dotnet core. When Greenshot is released for dotnet core, we would have the complete stack (well ~99%) running on Open Source technologies! -Another interesting fact is that the .NET Framework is used by billions of applications, this makes it __very__ hard for Microsoft to maintain backwards compatibility while adding new features. With dotnet core, which is written almost from scratch, a different approach is possible. By releasing more often and not having years of backwards compatibility, it's finally possible to introduce new features and maybe sometimes make breaking changes. One thing where this shows is that dotnet core has many performance enhancements, which will also be noticeable in Greenshot. +Another interesting fact is that the .NET Framework is used by billions of applications, this makes it __very__ hard to maintain backwards compatibility while adding new features or fixes. With dotnet core, which doesn't have all the legacy applications, a different approach is possible. By releasing more often and not having years of backwards compatibility, it's finally possible to introduce new features and maybe sometimes make breaking changes. One thing where this shows is that dotnet core has many performance enhancements, which will also be noticeable in Greenshot. How and when ------------ -After the first major steps towards a new Greenshot, which I described before, I started the next journey "making Greenshot dotnet core compatible". In May 2018 there wasn't much information on the topic so I tried to reach out to Microsoft. In June 2018 I managed to get a contact interested in working together, and we decided to try to use Greenshot as an early adopter of dotnet core 3.0! +After the first major steps towards a new Greenshot, which I described before, I started the next journey "making Greenshot dotnet core compatible". In May 2018 there wasn't much information on the topic so I tried to reach out to Microsoft. In June 2018 I managed to get a contact interested in working together, and we decided to try to use Greenshot as an early adopter of dotnet core 3.0. -I had the pleasure to talk directly to many people at Microsoft about what of the .NET Framework Greenshot uses, and what challenges we have with providing Greenshot to our users. We discussed many uses cases, some of them are still being worked on. In the mean time I started the first work of making everything, wherever possible, dotnet core or netstandard compatible. And then in September 2018 it finally happened, the first alpha/preview build of dotnet core 3.0 was available. +I had the great pleasure to talk to many fine Microsoft employees about what of the .NET Framework Greenshot uses, and what challenges we have with providing Greenshot to our users. We discussed many uses cases, some of them are probably still being worked on. In parallel I started the first work of making all the non UI parts dotnet core or netstandard compatible. And then in September 2018 it finally happened, the first alpha/preview build of dotnet core 3.0 was available. -With this available I worked for the last 3 months to get the whole of Greenshot running with dotnet core 3.0, without having such great contacts at Microsoft this would have been a lot harder, so I am really grateful for their support. While it was a _lot_ of work to make Greenshot dotnet core compatible, the UI part of the application actually was a case of "it just works", which is quite an amazing thing! +With this available I worked for the last 3 months to get the whole of Greenshot running with dotnet core 3.0, which while it being very early would have been quite hard, so I am really grateful for the support I got. While it was a _lot_ of work to make Greenshot dotnet core compatible, the UI part of the application actually was a case of "it just works", which is really amazing! -While writing this it's the first week of December 2018, the current state is that Greenshot is running on .NET Framework 4.7.1 and dotnet core 3.0 side by side! I would say that the dotnet core implementation has around 95% of the functionality which .NET Framework has, and this is mainly due to missing time as there are currently no show stoppers. Having things work side by side is very convenient, we can stay on the "stable" .NET Framework and release from there, but as soon as dotnet core 3.0 is available for the general audience we can also release for this. +It's the first week of December 2018 at the time I am writing this, the current state is that Greenshot is running on .NET Framework 4.7.1 and dotnet core 3.0 __side by side__! I would say that the dotnet core implementation has around 95% of the functionality which .NET Framework has, and this is mainly due to missing time. There are __currently__ no show stoppers why the dotnet core 3.0 version of Greenshot would have less functionality as the other, in fact I expect that it will be the other way around. Having things work side by side is very convenient, we can stay on the "stable" .NET Framework and release from there, but as soon as dotnet core 3.0 is available for the general audience we can also release for this. -Currently I expect that dotnet core 3.0 is quicker to release than I finish all the open ends on Greenshot, but we might be able to start releasing alpha builds at the end of the first quarter of 2019. +Currently I expect that dotnet core 3.0 is quicker to be released than I finish all the open ends on Greenshot, but we might be able to start releasing alpha builds at the end of the first quarter of 2019. -*Best wishes from Robin and the rest of the Greenshot team! We hope to have more news in the near future!* \ No newline at end of file +P.S. +I again want to thank the people at Microsoft who supported me and Greenshot. Thank you Rich, Daniel and all your colleagues, for staying calm while handling my annoying questions! +Hope to be able to work with you again in the future! + +*For now, what is left is to wish all our users happy times and enjoy the coming holidays!* +*Best wishes from Robin and the rest of the Greenshot team!* +*We hope to have more news in the near future!* \ No newline at end of file