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

Remove Xamarin Forms #2251

Merged
merged 25 commits into from Nov 17, 2023
Merged

Remove Xamarin Forms #2251

merged 25 commits into from Nov 17, 2023

Conversation

pauldendulk
Copy link
Member

No description provided.

@pauldendulk pauldendulk changed the title Remove Xamarin Forms WIP Remove Xamarin Forms Nov 6, 2023
@charlenni
Copy link
Member

Is this a change for Mapsui 5?

@pauldendulk pauldendulk changed the title WIP Remove Xamarin Forms Remove Xamarin Forms Nov 6, 2023
@janusw
Copy link
Member

janusw commented Nov 6, 2023

I fully agree that this should be done at some point, but isn't it a bit early?

(This question also depends a bit on the roadmap of further releases: When do you expect to release Mapsui 5? And will there be further stability releases for 4.x?)

Xamarin will still be supported by MS until May 2024, .NET 6 and 7 have been a pretty rough ride so far (with plenty of quality & stability issues) and .NET 8 is not even officially released ...

https://dotnet.microsoft.com/en-us/platform/support/policy/xamarin

@janusw
Copy link
Member

janusw commented Nov 6, 2023

Note: The nuget download numbers for 4.0.0 are still in the same ballpark for Maui and Xamarin.Forms:

I'm sure there are plenty of projects that haven't completed the transition from Xamarin to MAUI.

Removing Xamarin.Forms somewhere in the course of 2024 is completely sensible IMHO, but right now? Might leave many of your users dumbstruck. Just my two cents.

@pauldendulk
Copy link
Member Author

@charlenni @janusw Removing Xamarin.Forms is part of v5. This was added in the roadmap on April 4th this year https://dotnet.microsoft.com/en-us/platform/support/policy/xamarin. I think this project has a lot more potential if some fundamental changes were made. I want to move forward way faster than we are now going. When I have a few hours a week I want to spend it improving Mapsui instead of figuring out why it is not building this week. My plan is to release v5 soon, within months, but we could still release patches for v4.

Microsoft is supporting Xamarin until May1st 2024, they say, but since January 5 2021 (that is almost 3 years ago) they have only released patches on 5.0.0. At the same time they have 783 open bugs. That is not a lot of effort for a billion dollar company. We are just an open source project with no income from this project, I don't think we need to do much better than Microsoft.

Still, v4 is the supported version right now, clearly now v5 is not yet released, and perhaps to some extent also after the v5 release. But mostly, I don't really know what supporting means, because I don't want to promise anything, there will probably be patches, that's all I can say.

So, how to continue: My plan is to keep the patches small. This is not only because I do not want to put too much effect in them, but also to reduce the likelihood we introduce new bugs. Most people that have an application working with 4.1 just want stability. v4 is now in the develop/4.1 branch. There are two PRs now in master that I think should be released as 4.1.2. You could help by turning them into PRs for develop/4.1.

@pauldendulk
Copy link
Member Author

About the download numbers. What I see after a new release is that in the first few days there is a high number of downloads for most packages. I suspect these are local nuget repositories that automatically download the new versions. After a few weeks the download number start to stabilize. So, you need to look at the older packages to get a better impression. For 4.0.0, released 5 months ago it is Maui: 1996 versus Forms: 1496, so you could say it is in the same ballpark, but for 4.10 it is Maui: 600 versus Forms: 160, so that already starts to differentiate. If we check 4.1.1 in few weeks I expect the difference to be bigger.

But for the most part my argument is easy to keep up with the kind of support that Microsoft offers, if we release 3 patches before May 1 we will be doing better than they are.

@janusw
Copy link
Member

janusw commented Nov 6, 2023

Thanks for your detailed reply, @pauldendulk.

@charlenni @janusw Removing Xamarin.Forms is part of v5. This was added in the roadmap on April 4th this year https://dotnet.microsoft.com/en-us/platform/support/policy/xamarin.

True. In fact I have seen this, and maybe I should have spoken up earlier, but actually the roadmap does not mention any concrete dates. Earlier major releases of Mapsui had a cadence of 1 - 1.5 years, so I was expecting 5.0 around mid-2024. I don't see a problem with removing Xamarin support at that date. But I do fee like it's too early doing this right now (in particular if 5.0 is supposed to be released sooner).

I think this project has a lot more potential if some fundamental changes were made. I want to move forward way faster than we are now going. When I have a few hours a week I want to spend it improving Mapsui instead of figuring out why it is not building this week. My plan is to release v5 soon, within months, but we could still release patches for v4.

To be honest, I don't have the feeling that Mapsui's pace of development is too slow (you and @inforithmics are both doing an incredible amount of work on the project). To the contrary, I think Mapsui is a very active project with lots of changes. This is great, but it can also lead to a different problem: stability (both in the sense of stability of interfaces, but also regarding software quality).

Of course people might have very different requirements regarding pace vs stability, and indeed I was for quite some time living on the bleeding edge of Mapsui myself, but by now my use cases have matured a bit and I'm in need of a stable version that is more-or-less bug free, instead of chasing moving targets. Therefore stability is more of a concern to me at present than pace of development. And I'm sure many people have similar requirements.

Microsoft is supporting Xamarin until May1st 2024, they say, but since January 5 2021 (that is almost 3 years ago) they have only released patches on 5.0.0. At the same time they have 783 open bugs. That is not a lot of effort for a billion dollar company.

This almost makes me feel like I need to defend MS (although I'm usually more in the position of criticizing them :D) ...

Yes, the pace of development for Xamarin is certainly quite low by now (with the focus having shifted to MAUI). Basically no new features are implemented, and only the most important bugs are being fixed. BUT: It's very stable, and at least MS is making sure that people can continue working with it until MAUI is stable enough (which is taking more time than we all would prefer).

We are just an open source project with no income from this project, I don't think we need to do much better than Microsoft.

I don't think you need to do 'better' than Microsoft. I only think you should not drop Xamarin too soon, since many people may still need to rely on it. Looking at the total download numbers, it's Mapsui's most popular platform after all.

Also I wonder whether removing Xamarin would gain so much in terms of getting rid of maintenance overhead. It's there, it's working, it even shares most of the code with MAUI (which will stay).

A lot of 'exotic' platforms were added to Mapsui recently (Avalonia, Uno, Eto). I don't think any of them has reached the number of downloads that the Mapsui.Forms package has. Why are they given more priority then?

So, how to continue: My plan is to keep the patches small. This is not only because I do not want to put too much effect in them, but also to reduce the likelihood we introduce new bugs.

Fully agree. I think that's a good idea.

Most people that have an application working with 4.1 just want stability.

Here I don't agree. I would put it the other way around: The people that want stability have probably not even upgraded to 4.1 yet (including me). What they'd need are further 4.0.x releases that fix the worst bugs without the risk of adding further bugs.

@pauldendulk
Copy link
Member Author

I am not criticizing Microsoft, in fact I think they made the right decision to leave Xamarin.Forms behind and move on to Maui, but I am comparing what we do to what Microsoft is doing. Our master branch should be compared to Maui and our develop/4.1 branch should be compared to Xamarin.Forms. Dropping Xamarin.Forms from master is like Microsoft dropping Xamarin.Forms from their main development when going to Maui. The difference with Microsoft is that we were adding new features to Mapsui Xamarin.Forms years after they dropped it.

About the pace of development. This is how open source software works. I don't assign people to tasks, things just happen. People contribute whatever they are interested and I thank them for that. In larger projects this problem, of stuff happening on all fronts, will be even bigger. The way to go about this is by working in different branches, but this comes at a price as well, this is why I would personally have preferred a longer period where we could stay on one branch. When I decided to move master to v5 this was also to prevent breaking changes and bugs in v4.

Also I wonder whether removing Xamarin would gain so much in terms of getting rid of maintenance overhead. It's there, it's working, it even shares most of the code with MAUI (which will stay).

The problem is mostly in the tooling. Xamarin.Forms and Uno UWP relied on msbuild, and old nuget packages. We needed hacks to stay compatible with old and new. Those hacks work for a while but can break after an update. We had weird bugs in newer versions of visual studio. This is not just theory, I actually have to spend a lot of time on it.

In master we will now move to .NET 6 and compile with dotnet build use newer versions of C#, use the built in nullable checks.

A lot of 'exotic' platforms were added to Mapsui recently (Avalonia, Uno, Eto). I don't think any of them has reached the number of downloads that the Mapsui.Forms package has. Why are they given more priority then?

Avalonia and Uno are not exotic. Their combined downloads for v4.0.0 are 1489 (884+605) while Xamarin.Forms has 1496, and I expect them to grown. Then again there really is a price in supporting more. I think we should support less and support it better (this does not only apply to platforms). This is also why I want to move more of the platform specific code to shared code, so the cost of maintaining an extra platform is low.

I did not like having to go to 4.1.0 instead of 4.0.1, but this was a consequence of the ongoing changes. The only way to prevent this would have been to split v4 and v5 even earlier.

@janusw
Copy link
Member

janusw commented Nov 7, 2023

Also I wonder whether removing Xamarin would gain so much in terms of getting rid of maintenance overhead. It's there, it's working, it even shares most of the code with MAUI (which will stay).

The problem is mostly in the tooling. Xamarin.Forms and Uno UWP relied on msbuild, and old nuget packages. We needed hacks to stay compatible with old and new. Those hacks work for a while but can break after an update. We had weird bugs in newer versions of visual studio. This is not just theory, I actually have to spend a lot of time on it.

In master we will now move to .NET 6 and compile with dotnet build use newer versions of C#, use the built in nullable checks.

Ok, point taken. I have been cursing the awkward msbuild myself a couple of times, and I am also quite familiar with weird VS bugs (in particular on MacOS, and in particular with pre-net6.0 or mixed projects) 😆

Moving to dotnet build and dropping the old legacy stuff will be a big improvment on the tooling front indeed.

@janusw
Copy link
Member

janusw commented Nov 7, 2023

So, trying to wrap this discussion up: If you're dead-set on removing Xamarin.Forms on master now (I can see your reasons, but I'm not quite happy about the timing), then my suggestion is that we (as a developer community) should at least make sure that Mapsui 4.x keeps being maintained for a while and will receive some bugfixes.

However, I don't expect you, @pauldendulk, to take all this maintenance burden on your shoulders alone. I can offer to act as a maintainer for Mapsui 4.x for a while (doing backports of bugfixes and preparing releases).

Note: Since I am currently blocked by one or two rare bugs from updating to 4.1, I'd suggest to set up a develop/4.0 branch, backport some low-risk fixes there and release a 4.0.1 (and maybe 4.0.2 and 4.0.3 afterwardss)

Maybe this way we can achieve a compromise between fast-paced development and stability that everyone can live with. What do you think, @pauldendulk?

Does anyone else have an opinion on this topic?

@pauldendulk
Copy link
Member Author

@janusw It is bad enough we have to work with two branches. I don't want to introduce a third. The changes from 4.0 to 4.1 are not dramatic. I am sure we can resolve the problems. Also, it is important to solve the problems, because if it is a bug for you it is also a bug for others and the majority of users will be using 4.1. Is this the problem you are referring too? #2197

@janusw
Copy link
Member

janusw commented Nov 8, 2023

@janusw It is bad enough we have to work with two branches. I don't want to introduce a third.

That's why I offered to help with the maintenance work. But anyway ...

The changes from 4.0 to 4.1 are not dramatic. I am sure we can resolve the problems. Also, it is important to solve the problems, because if it is a bug for you it is also a bug for others and the majority of users will be using 4.1. Is this the problem you are referring too? #2197

Yes, that is the main showstopper for me right now. If it can be solved and I can move to 4.1, even better. (But there might possibly be another issue, have to check 4.1.1 again).

@janusw
Copy link
Member

janusw commented Nov 8, 2023

Does anyone else have an opinion on this topic?

☝️ @inforithmics, @charlenni ?

@charlenni
Copy link
Member

@janusw asked, so I will give my comment here. I lost the overview over the project in the last month. There were so many different PRs with many commits, most, for me, not very clear, what they all about. And to less time.

It is @pauldendulk project. So he has the lead. I wouldn't have made a 4.1 at all. And when, then there should be a 4.0, a 4.1 and a 5.0 branch. But the most important part for me is, that there isn't a clear plan where to go with the next versions. Removing platforms is ok, when they obsolete, but that isn't an improvement for the user. And integrating MapView options in MapControl is a documentation problem. MapView was always a convenient wrapper around MapControl, so that Mapsui could replace the Xamarin.Forms MapView.

So, I'm missing the idea behind 5.0. If it is removing old platforms and bring Mapsui to .Net 6, then this is ok. But do this and add some changes to RasterTileLayer and some changes here and some there, then it looks like a project without plan. And it is nearly impossible to help. For me, it looks like the only improvement is to have more platforms Mapsui runs on. And this is the most time-consuming problem, because I don't know anything about these platforms. So how should I support them? And a waste of time, that could be used for more relevant things, like ordering of layers, rendering/drawing behavior or speed improvements.

I would prefer a clear plan, what to change in Mapsui. This should be set before starting with a new version. Then it is clear, when Mapsui 5 is ready (all parts of the plan are fulfilled) and when to start with the next version. The next is, that this plan should have many small points when you expect to have many small PRs. If there is a point "MapView", then this is too unspecific and big. If you don't like MapView, then remove it. There isn't anything special, that couldn't reach with MapControl too. You have to say, which parts of MapView are helpful and must implement back into Mapsui. And I would prefer a discussion about the above points. Software development is only a hobby for me. So my ideas not always the best.

Little chaotic, but I think, you could understand, what my opinion is.

@pauldendulk
Copy link
Member Author

@charlenni Thanks you for you feedback!

Systematic work towards a next milestone is not so easy in an open source project for many reason:

  • You could try to be conservative and not try to make big changes in the project, but many of the bugs are not just local mistakes but are related to a flaw in the design and a proper fix just needs a bigger change.
  • We support many platforms/components and fixes in one platform/component may have consequences for another. A major change may seem needless to you but it might be a major big fix for someone else. All PRs come about because of real problems that not everyone is aware of (I should start adding relations between issues and PRs).
  • It is voluntary work so you can not just assign someone to a task, because:
    • Developers are interested in a particular topic. For most is it just a hobby, so you should just pick what you like to work on!
    • Developers have knowledge of some specific topic so work on that because they can.
    • Developers work on things that they themselves need in their own projects. For me that was the way Mapsui came about. I had built things that I needed myself and open sourced it. And this year I added couple of things I needed in a project.
    • Activity of developers varies. This year I had a period of quite a few months where I did hardly anything, so things go their own way.
  • Often it is not clear what needs to be done. So, it is not something you could properly describe beforehand. You need to dig into the problem to understand it, and only during work on it come to a good solution. And the changes that come about maybe bigger than you anticipated. This is often the case in Mapsui because it is older code that needs some bigger design changes. Specifically, when mentioning 'Merging Mapview into MapControl', I don't know exactly how that needs to be done.

That said, we could try to improve it, and your message motivated me to try. Perhaps I should look into the github project thing.

Earlier this week I was looking into the 'help-wanted' issue tag that is used in Microsoft projects, as a way to indicate that people could work on it. The System.Drawing.Color issue that I created this week was intended for that. It is a fairly big task but I expect it does not need a big design change. #2260

I also would like to promote this issue. Which I think will be the biggest in improvement in the history of Mapsui , past, present and future. It will save us and our users loads of time. It is writing the logger to the map canvas. Should be configurable, but default on for developers. It would have saved me an hour today. #1579

@pauldendulk
Copy link
Member Author

@charlenni More follow up on your post later.

@charlenni
Copy link
Member

What you say is mostly right. People are coming and going. You could not rely on them. But it seems, that some people are more interested in this project than others. And for them, there should be something to work on.

I'm one of these peoples, but I have no plan what to do. I assume, that I could solve any problem with making a special map with Mapsui. And I don't do anything with Mapsui for an own project (beside the vector map). So for me, it would be helpful to have a list of things to do. Each time I had time, I could look into this list and try to solve a problem. The problem you mentioned in #1579 is such a thing. It is not too big and is comparable to the performance widget. Or the change to System.Drawing.Color. Seems not to be a big thing too.

So make a list of things, that are not very complicated, but time-consuming for you. If the screen logger is ready next week or in 2 months, isn't very important. But if it is done, Mapsui is again a little more helpful.

You can plan the MapView changes. The most important part of MapView is, that you could use WGS84 coordinates in Mapsui. That format is, what users know. I would say, explaining the coordinate system of Mapsui better and explain, how to convert WGS84 to Mapsui and vice versa is the biggest part of this integration.

@janusw janusw closed this Nov 11, 2023
@janusw janusw reopened this Nov 11, 2023
@janusw
Copy link
Member

janusw commented Nov 11, 2023

sorry, closed by accident 🙈

@janusw
Copy link
Member

janusw commented Nov 11, 2023

Thanks for the comments, @charlenni (although most of them actually do not concern the topics that I asked about, namely the removal of Xamarin.Forms and the tension between progress and stability).

I lost the overview over the project in the last month.

This matches one point I made: There is a lot of progress, which is great, but it comes at a price. My main concern is not losing the overview, but the problem of instability: A very high rate of modifications will potentially introduce many bugs, keep changing the interfaces and make it harder for people to use the library.

It is @pauldendulk project. So he has the lead. I wouldn't have made a 4.1 at all. And when, then there should be a 4.0, a 4.1 and a 5.0 branch.

For me 4.1 was also a bit surprising, since it deviated from the previous release scheme (one major release on the timescale of a year and many beta tags in between).

In principle I think that more and smaller releases are better than fewer larger ones, but there should always be some stable 'LTS' version for people that use the library in a productive environment and need a stable and bug-free version (instead of the latest bleeding-edge features). Right now one only has the choice between 'unstable' and 'extremely unstable' (and 'very outdated').

But the most important part for me is, that there isn't a clear plan where to go with the next versions. [...]
I would prefer a clear plan, what to change in Mapsui. This should be set before starting with a new version.

At least @pauldendulk has some sort of roadmap, which sets the general theme and ideas for the next release. Not all projects have that.

Well, and after all, this is an open source project. Maybe you need to adjust your expectations a bit and realize how such projects usually work (in particular if they're community-driven and not backed by a commercial company): There is no plan and no one who tells you what to do and what to work on. There is just a loose collection of contributors with varying degrees of commitment and widely differing goals and interests. Everyone contributes to the big picture by scratching their own itch, which ideally results in a product that works well for everyone.

I'm a bit puzzled why you are complaining that no one tells you what to do. This leaves you the freedom to choose by yourself which improvements are the most important to you and work on those. Or, if you cannot agree about the fundamental direction of progress with the other contributors/maintainers: Fork the project or start a completely new one, and do your own thing (all by yourself or with a different set of contributors).

@pauldendulk
Copy link
Member Author

I lost the overview over the project in the last month.

One thing I could improve is to be more clear about the status. The summary of the status right now is:

  • 4.1.1 is the stable version
  • In master we are now going towards v5.

I will add the current status to the roadmap page.

@pauldendulk
Copy link
Member Author

I looked into github Projects but there is nothing there that would help us now. I will now simply use milestones to assign issues to a version. I announced it here: #2278

There is more I need to specify and I like to explain more about my general ideas but this is it for now.

@pauldendulk pauldendulk merged commit 14af6e0 into master Nov 17, 2023
5 of 6 checks passed
@pauldendulk pauldendulk deleted the feature/remove-xamarin-forms branch November 17, 2023 14:09
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.

None yet

3 participants