Interview: A Look Inside Paint.NET
In the two years since it began as a senior project, Paint.NET has surged in popularity around the world and its developers continue the open source work from their new jobs at Microsoft. BetaNews sat down with project lead Rick Brewster to gain insight into Paint.NET, which he calls "Photoshop for everyone."
Microsoft may not be known for its support of open source, but the company mentored the software in its early stages and Paint.NET is used internally on the Redmond campus. For now, however, Paint.NET remains an "unofficial" project and Brewster says it -- and the code inside -- will remain free. Version 2.6 is now available for download.
BetaNews: Let's start with a little background on Paint.NET. How did the project begin and what was Microsoft's involvement?
Rick Brewster: The project started in January 2004 as a Senior Design project at Washington State University [WSU] (the class was Comp. Sci. 423). Kerry Hammil from Microsoft, who mentored the project that semester, had the idea of updating Paint to make use of the new features in GDI+ (antialiasing, etc).
I nominated myself to the project manager position and the four of us (Brandon Ortiz, Chris Trevino, Luke Walker, and myself) kicked out a v1.0 product in about 15 weeks. We didn't start with the source code to Paint, but instead built Paint.NET from scratch -- I was quite impressed with how easy it was to build an application in C# and to keep it organized.
Kerry's role as mentor was to provide guidance and requirements. She made sure that we had certain design documents in place, that certain deliverables were accounted for (e.g. the help file), and she answered many questions we had about various things.
BetaNews: What are the goals of Paint.NET? It seems like you have built a very powerful image editor while retaining simplicity. Is Paint.NET a Photoshop or GIMP for novices?
Rick Brewster: The primary goal of Paint.NET is ease of use. One rule of ease of use is recognizing that "people don't." They don't follow or even read directions (I certainly don't), they don't read dialog boxes (I hate dialog boxes), they don't backup their files, etc. And many people aren't interested in figuring out all sorts of complex or technical things. They just want it to work. We try to make things simple and discoverable enough so that you don't have to hit F1 and read a page of text just to figure out how to get things done.
Right now I believe we have the subset of features [from Photoshop/GIMP] that most people want to use most of the time. Hopefully we're also doing a good job of introducing more advanced functionality (e.g. layers) to people who would otherwise not have been able to use them (either because of cost or complexity). But if they don't want to use that functionality, we don't want it to get in their way.
I don't believe that we should be aiming to replace Photoshop or The GIMP. Photoshop is an incredible piece of software that is used by serious professionals -- $600 is not a lot of money when you're running a business, and it ends up paying for itself. It also has a small army dedicated to its full-time development, whereas we have three people with spare time.
Right about the time of our v1.0 release, we had an open house at WSU where we had a lot of people come and look at all the senior design projects (not just Paint.NET). There was a young woman who bluntly asked, "I already have Photoshop, why in the world would I want this?" I responded by saying, quite simply, "You wouldn't." I then explained that while she wouldn't have much use for it, other people she knew probably would. Her mom, for instance, might just have a need to resize, crop, or add a caption to an image -- using Paint.NET in this case is much cheaper than Photoshop, and much simpler than The GIMP.
Saying that Paint.NET is "Photoshop for novices" might be slightly pejorative; a better description is probably "Photoshop for everyone."
BN: Who is currently working on the program? Is Microsoft directly involved in its development?
RB: Right now there is myself, Tom Jackson, and Dennis Dietrich. We all work at Microsoft full-time, but none of us work on the same Microsoft projects. Tom and I both graduated from Washington State University. Dennis is handling the German translation and is also what you could call our Localization Manager. Tom's a math genius who "knows things" and he contributes some of the more mathematically complex stuff: GIF dithering, 3D Rotate/Zoom, the math behind the new layer composition, etc. I do everything else -- the guts, the overall architecture, the installer, Web site, UI, performance, etc.
We work on the project in our spare time. You could say that it is officially an unofficial project. It's not like we have a business plan or market penetration goals.
BN: Open source and Microsoft are not usually synonymous. What was behind the decision to make the product's code open?
RB: Paint.NET started as a university senior design project, and part of the spirit of that was building something that other people could learn from. If you're curious how we've implemented Gaussian Blur, for instance, just download the source code and poke around in the BlurEffect.cs file.
We just haven't seen any reason to discontinue this, and having a large C#/.NET application with source code available has far reaching benefits. For example, if you're a company that wants to create a product for obfuscating .NET assemblies (DLL's), or for auto-generating unit tests, Paint.NET is a great program to throw at your new tool. It's over 100,000 lines of code, it's not some small sample app, and it's something that real people use. Those are not two contrived examples, by the way -- I've seen websites with both of those where they used Paint.NET as a test case for their tools. We also use it internally at Microsoft for various purposes.
BN: You've just finalized and made available the release of Paint.NET 2.6. What are some new things users will see in this release? Was moving to .NET Framework 2.0 a major step?
RB: The most immediately noticeable change from 2.5 to 2.6 is the user interface: we upgraded everything to an "Office 2003" look and feel, whereas before we had a clunky Windows 95-era set of icons and toolbars. We also have a new Curves adjustment, seven new layer blending modes, full 64-bit support, and lots of performance improvements. Under the hood we have rewritten the way layer composition is handled so that not only is it correct, but faster. In 2.5 and before we had blending code that was "cross your fingers"-correct, but it had no solid mathematical basis and it really broke down in some important scenarios.
Moving to .NET 2.0 was not really a big hurdle. The biggest challenge was getting our installer and build process to work with both 32-bit and 64-bit. Staying congruent to our "ease of use" philosophy, I didn't think users should have to be burdened with figuring out whether they are on a 32-bit or 64-bit version of Windows and to then decide which installer to download. I also did not want to have to maintain and test two separate installers. This meant we needed one installer that handled both, which is really not as simple as it sounds. Windows Installer was not really designed for this scenario, so we had to be clever and essentially trick it.
BN: What's next on the roadmap beyond 2.6? Any neat features planned for version 3.0?
RB: I think the biggest feature that we can start yelling about is that v3.0 will have the ability to open multiple images within the same instance of Paint.NET ("MDI"). This will also bring along many other major UI changes, as our current model does not scale well past one image.
We will also expose image and layer metadata to the user so that not only can they edit it within Paint.NET, but they can search for it using Desktop Search or Vista. People have also been asking for things like gradients, and we're planning to oblige them.
Other than that, I have a lot of cool things I can talk about but no concrete designs yet. We do not have a planned release date for anything past v2.6.
BN: As development of any software product progresses, programmers often have a tough time balancing the addition of new features without making the product overly complicated and confusing. Is the Paint.NET team making a special effort to ensure the product doesn't become too daunting or bloated to users?
RB: Like I said before, our top priority is ease of use. So... yes. Everything we add or change goes through a gauntlet where we try to determine if any of our users could figure it out or if they'd even care. Many times we have had to work really hard to implement a simple UI on top of a complex feature.
BN: Paint.NET has become especially popular in other countries (and you now offer language packs). Did that surprise you?
RB: Of course it was a surprise -- as was going from 100 downloads a month (May 2004) to over 180,000 (January 2006)! When we originally created Paint.NET we had no idea that anybody would care about it, let alone people outside our immediate social network or even outside of the country.
BN: Any plans to turn Paint.NET into a paid offering or will you find other ways to fund ongoing development?
RB: Paint.NET will remain a free download, although we are now accepting
donations. The proceeds are actually sent to a Senior Design Fund at Washington State University's school of Electrical Engineering and Computer Science, and it will help them to maintain up-to-date equipment and curriculum.
BN: Lastly, how can people get involved in the project? Are you looking for outside help?
RB: We're not looking for any help on the development or testing side, but you can always visit our forum and lend a helping hand there. There's a big gap in our documentation right now because we don't have a lot of tutorials or "how to's" that really show off what Paint.NET is capable of doing (check out the "Glass Orbs" tutorial by Crazy Man Dan for an example of a good tutorial). There is also the community localization efforts, and we are about to start pushing people to update the language packs for v2.6.
Lastly, the biggest form of help we get is feedback. If you have an idea, a suggestion, or some constructive criticism ... send us an e-mail: [email protected]. We don't respond to every e-mail but we do read them.