The linker is a tool one can use to only ship the minimal possible set of functions that a set of programs might require to run as opposed to the full libraries.

before after assembly --------------------------------------- 9K 5.5K Accessibility.dll 129K 34K ICSharpCode.SharpZipLib.dll 40K 24K MoMA.Analyzer.dll 44K 33K MoMA.exe 350K 277K Mono.Cecil.dll 70K 5.0K Mono.Data.Tds.dll 172K 15K Mono.Posix.dll 282K 7.5K Mono.Security.dll 2.4M 1.9M mscorlib.dll 115K 75K System.Configuration.dll 778K 354K System.Data.dll 1.4M 679K System.dll 429K 201K System.Drawing.dll 45K 6.5K System.EnterpriseServices.dll 129K 7.5K System.Security.dll 26K 6.5K System.Transactions.dll 1.9M 676K System.Web.dll 342K 88K System.Web.Services.dll 2.9M 1.8M System.Windows.Forms.dll 1.2M 834K System.Xml.dll ---------- 13M 7M

According to my blog, it's been 24 days that I've joined the Mono Team at Novell , and I haven't yet blogged about what I am doing there.Appart from a week in Seattle with Rodrigo and Miguel , where we've been attending a Compiler Lab hosted by Microsoft, I've been mainly working on the linker The linker is something Miguel wants to have since quite a bit of time, as one can find references to it on his blog in posts that are almost three years old . Thanks to the Google Summer of Code 2006, I started working on it.To make it short, here is a definition of what a linker is, here is the definition extracted from its page on the Mono wiki:Writing a linker is not very hard. It's basically a mark and sweep operation, but the mark operation have to be very intrusive, and you have to dig in every piece of metadata so you don't forget any type, or any methods. Plus, there is also a few types in the BCL that are used inside the runtime (like StackOverflowException for instance), and some of them with a field layout that is tied to an unmanaged representation in the runtime (AppDomain for instance). That makes it very easy to forget something.But today, after much fighting, I managed to have a non-trivial application working after a complete linking of itself and the base class library. This application is now famous, and have been used by thousands of users to test if their own application could be run of Mono. You've recognized MoMa . It maybe looks like a simple application, but it uses stuff like System.Windows.Forms, System.Web.WebServices or even Mono.Cecil to do its job. And all it all, it's not that simple, believe me.So, here is a little table where I've gathered some data about the size of the assemblies referenced by MoMa, before, and after having ben linked:So for the MoMa case, it's almost a reduction of half the size of the binaries needed to run it. Pretty good heh?That's really convenient for people who embed Mono for the sake of running their own application. By using the linker, they can ship with only what they need to run their application.Next time, I'll tell you about some limitations of the linker, and the solution to get over them.