this looks like a job for... tomorrow!

The Big Finale

Last night, we hit a very important milestone in our support for Winforms. We are API complete, which means that our public API is exactly the same as .Net's (all 12,776 methods).



I wasn't around at the time, but the first check-in of Winforms occurred on July 8th, 2004, meaning it has taken almost 4 years to implement. Since then, there has been 6,434 commits to Winforms.

Thank you to everyone who helped us get here! Thank you people who contributed code! Thank you people who contributed tests! Thank you people who contributed Bugzilla reports!

What's next? Well, as with your typical 115k line cross-platform windowing/widget kit, there are bound to be bugs. So we'll be working to fix those. If you come across any, please report them so we can fix them too! Go here to report them.

All of this will ship with our upcoming Mono 2.0 release.

20 comments:

Sandy said...

Congratulations! This is awesome news for Mono users everywhere. Should really help with the migration of all those long-tail winforms apps.

hypersw said...

Well done! So impressive an effort!

I'm long since eager to write cross-platform GUI code, so are there any estimates on when a reasonable subset of the Avalon framework (WPF) will be available? WinForms, as far as I can see, would not port — the show stops on the first Handle use and WinAPI platform call.

m said...

You can use handles in Winforms, they just do not map to an actual HWND on non-Win32 systems, but you can definitely use them, and you can even override WndProc methods on derived classes from Control and process a pile of WM_ messages that Mono's Winforms actually builds on.

You certainly can not P/Invoke and get portable software; The same is true of WPF: if you P/Invoke with WPF, you will not get portable software (well, if you use WPF today, you do not get portable software to begin with ;-).

We currently do not have plans/staffing to work on WPF, so its up to the community to step up to the challenge if they want a WPF implementation.

But we do have a Silverlight implementation, so maybe that will do for now.

hypersw said...

Pity.

Avalon is managed code all the way through that you can reach (put aside bitmap-effects and such). From one side, this means it's highly portable. From the other, it allows to write UI without ever reverting to PInvoke for purely visual/behavioral things.

WinForms-on-Windows, being a thin layer on top of PInvoke, forces into calling right thru it, into the platform implementation, for the missing or misinterpreted pieces of functionality.

That's where I see the major difference in portability.

GTK# maybe? Seems to be highly extravagant on Windows, though...

Francisco L. Velasco said...

Congratulations! Great job.

Thanks.

Anonymous said...

Great work. We use mono professionally, and this is will move our development forward by leaps and bounds!!!

jpobst said...

WinForms-on-Windows, being a thin layer on top of PInvoke, forces into calling right thru it, into the platform implementation, for the missing or misinterpreted pieces of functionality.

I hear people mention this, but have rarely seen anyone actually use it.

However, we are interested in supporting common use cases if anyone has any. Ie: we would create a managed library/function that would p/invoke the native stuff on .Net and replicate the same behavior on Mono.

If someone can point to some needed functionality that is commonly p/invoked to get, please do. Thanks!

daniel said...

If someone can point to some needed functionality that is commonly p/invoked to get, please do. Thanks!

Where should we report this information to?

One thing that I had to use pinvoke for recently is selecting a window (user32.dll, GetCapture, WindowFromPoint)

btw. Congratulations, nice job

Patrick said...

WinForms should in theory be cross platform, but does Mono now layer on top of Winelib in order to handle the Win32 API calls?

I can somehow imagine a lot of .NET code (especially buggy in-house apps) out there that rely on an underlying implementation of Win32 in order to function.

jpobst said...

Where should we report this information to?

You can report it to me via monkey AT jpobst DOT com.

Thanks!

Anonymous said...

Congratulations!

This is an important milestone for Mono..

Anonymous said...

Congrats to all of the Mono community great work!

Zayed said...

Congratulations!

and Keep it up

Selig said...

Congratulations! :-)

Anonymous said...

Great work
Congratulations
And when asp .net 2.0 full in mono
???

jpobst said...

ASP.Net 2.0 (minus WebParts) has been complete in Mono for quite some time. Currently, there are no plans to implement WebParts.

Anonymous said...

Congratulations!

Tri said...

Good work, and congratulations for Mono WinForms team.
I would like to say special thanks for all of Mono WinForms tema.

Anonymous said...

That's impressive, a great step for the project!
Does this mean that now all .Net Applications using Windows.Forms will work with mono? (Like Paint.Net, the application I missed most using mono and Linux)

rivera151 said...

This is great news; congrats mono team. Now if we could just get monodevelop to run (its tougher than what it sounds :-( ).

But keep it up! This is quite an amazing feat.