Inkscape – A Union of Contributions Makes a Difference

I had to reread Bulia’s email three times. It was one of those nigh-mythical events that you read happens in Open Source projects, but never see in person. Yet, amazingly, here it was, and I knew Fred’s patch would instantly double Inkscape‘s utility.

Scalable Vector Graphics and the Open Source Community

Click for a larger version Inkscape is a program for viewing, making, and editing two-dimensional vector drawings. This is different from “raster” drawing, as in MS Paint, Photoshop, or The GIMP. In those tools you’re essentially just “painting” destructively on a canvas. By “vector” drawing I mean that when you create a shape like a rectangle, it retains its identity. You can easily go back and resize it, change its color, or move it around without disturbing the rest of the drawing. Vector drawing is what you’d be doing in Illustrator, Corel Draw, Freehand, Dia, Visio or even PowerPoint.

There have been a number of popular Open Source vector graphics tools such as tgif, idraw, Sketch, and xfig, but one of Inkscape’s distinguishing features is that it stores its drawings in a web-friendly XML format โ€” SVG. SVG, an acronym for “Scalable Vector Graphics”, is a W3C standard that is gaining support worldwide, in proprietary and public software alike.

Click for a larger version The Open Source community is now adopting the SVG format for everything from desktop icons and company logos to web page animation and artistic Illustration. Inkscape (by way of Lauris Kaplinski’s popular Sodipodi project) is derived from Gill, one of the first Open Source SVG editors, and so follows a long history of serving the SVG needs of the community.

In the five years since Raph Levien began work on Gill, a huge range of features and capabilities had been added to the codebase. Node editing, alpha blended gradients, object alignment, text handling, localization and more had augmented the basic underlying drawing capabilities to make the tool potentially useful for real drawing work. However, there was one glaring omission for which we and scores of users had been seeking a remedy…

The Contribution of Boolean Operations to Inkscape

I read the email again just to be sure.

“I’ve been sent a new patch that implements boolean operations…
The license is public domain. It’s been uploaded to the patch tracker.” โ€” Bulia, November 2003

Click for a larger version This was very cool. Boolean operations are a way of taking two shapes and combining them together in various ways to create a single resultant shape. Users of Adobe Illustrator might recognize them in the “Pathfinder”. The four basic operations are Union, Difference, Intersection, and Exclusion. It’s an absolute requirement for creating any artistically sophisticated drawing, and its lack had held the tool back.

Once before, someone had contributed a patch to add boolean operations, but that patch relied on a polygon clipping library provided under an incompatible license. There’s little more frustrating than having a solution in hand, only to be hamstrung by legal problems. Even though it was an important feature for us, we regretfully postponed development of it into the distant future on our roadmap and proceeded with other work.

Here in my inbox, unsolicited and totally unexpected, was the answer. We quickly double-checked that the licensing was clean, that the code was the author’s original work, and that it indeed implemented the feature as promised; it passed on all counts. Fred’s boolean patch had arrived right as we were releasing Inkscape 0.36, so as soon as that release was out the door we merged his patch and started working with it.

Following our policy to “Patch first, ask questions later”, we integrated the new feature as soon as practical, without wasting time arguing about it on a mailing list. We figure that the best way to evaluate an idea is to code it up and see how it works in practice. A working feature now is better than a perfect implementation that still isn’t done. Along with that, maintaining a low barrier to entry for new developers is vital; we don’t want anyone to give up on contributing out of fear their contributions won’t be accepted.

Click for a larger version One of the first areas of focus was to add menu items and keyboard shortcuts for the commands it provides. Mentalguy had just recently finished up a massive redesign of the user interface, and so knew the exact place to slip it in. Likewise, Bulia had been hard at work creating a thorough set of key mappings for giving experienced users fast shortcuts for productivity, and found appropriate keys to map the new commands to. Mentalguy’s attention to menus, coupled with Bulia’s shortcut key work demonstrate the value placed on usability for this tool. Both men are artists at heart, so place great importance on making the tool as useful to real users as they can.

Once the basic functionality and usability of the newly merged booleans code was established, other users started testing the feature in real world situations, and identify and shake out bugs with us.

Meanwhile, the development team turned their own focus deep into the code itself. With Fred’s help, they isolated and repaired lingering quirks and bugs. Our more mathematically inclined developers dug into the algorithms in search of ways to relate them to similar functionality elsewhere in Inkscape. By the time we released 0.37, the booleans code was solid.

Even better, Fred stayed on and worked with us to optimize the code’s performance and derive new and exciting features on the foundation he built โ€” such as commands for offsetting, division, and simplification of paths.

In many Open Source projects, such a windfall would be rare, but Inkscape has been fortunate to receive many major advancements from the contributions of newcomers. This is evident when one has used the program for a bit and notices that beyond just having all the usual drawing capabilities, there’s a huge number of thoughtful-yet-modest behaviors hidden away, that combine to make Inkscape a pleasure to work in. Grid and guideline snapping uses a tunable “gravity” style rather than absolute snapping. Objects can be nudged a pixel at a time, for when you need to get that shape just right. The zooming and auto-scrolling of the canvas are direct results of feedback from users and their ideas of how things “should” work. There is even an XML editor built in, for those power users who like to see exactly what they’re getting; this tool allows direct access to the drawing’s underlying DOM model. SVG is XML, and Inkscape is not ashamed of that fact.

The Future

Click for a larger version Work continues strong on Inkscape. A very interesting new feature that will appear in the 0.39 release is clones. Basically, you can create a copy of a given object that inherits its properties, so that if you change the original, the clone is also modified accordingly. As an example, consider creating a flower with eight cloned petals rotated around the flower’s center; tweaking the original petal causes all the cloned petals to similarly change. This feature actually comes straight from the SVG spec, so is a capability required for SVG compliance, but nobody knows of any other drawing apps that have a drawing operation quite like this.

Another feature still in progress is ECMAScript (better known as Javascript), currently being developed on a branch from the main codebase by Ishmal. This promises to provide document-level scriptability, including simple programmatic animation.

There’s also a new
Open Clip Art Library established to collect and promote SVG clip art for use in any of the open source drawing tools, and we hope to build in Inkscape strong support for browsing and using this library.

The latest contribution that I think will have widespread and exciting ramification’s was brought to Inkscape quite out of the blue by Mike Hearn. Mike’s project, called AutoPackage, seeks to solve the perennial problem of easily installing software on Linux. It wrappers the underlying RPM, Debian, etc. systems with a friendly GUI front end, similar to what’s used on Windows. Mike’s hoping Inkscape can help be a good proof of concept for his work, and we’re looking forward to gaining an extremely easy installation mechanism for non-technical users.

I know how rare it is for a project to get very much outside participation, and it emphasizes just how remarkable and invaluable each of these contributions are. To me, this type of sharing is what makes Open Source so cool. Fred’s Booleans patch was the first of many such contributions for Inkscape. And who knows what surprise new feature will show up in our mailing boxes tomorrow!

About the Author
Bryce Harrington is a founder of the Inkscape project, and a long time open source developer. Professionally, he’s a senior performance engineer at the Open Source Development Labs. He wishes to give thanks to all the ‘scapers who lent an eye to reviewing and contributing to this article.

49 Comments

  1. 2004-06-02 5:42 pm
  2. 2004-06-02 5:46 pm
  3. 2004-06-02 6:21 pm
  4. 2004-06-02 6:33 pm
  5. 2004-06-02 6:38 pm
  6. 2004-06-02 6:45 pm
  7. 2004-06-02 6:48 pm
  8. 2004-06-02 7:03 pm
  9. 2004-06-02 7:11 pm
  10. 2004-06-02 7:11 pm
  11. 2004-06-02 7:12 pm
  12. 2004-06-02 7:16 pm
  13. 2004-06-02 7:17 pm
  14. 2004-06-02 7:34 pm
  15. 2004-06-02 7:38 pm
  16. 2004-06-02 8:15 pm
  17. 2004-06-02 8:23 pm
  18. 2004-06-02 8:27 pm
  19. 2004-06-02 8:28 pm
  20. 2004-06-02 8:30 pm
  21. 2004-06-02 9:12 pm
  22. 2004-06-02 9:13 pm
  23. 2004-06-02 9:16 pm
  24. 2004-06-02 9:37 pm
  25. 2004-06-02 9:43 pm
  26. 2004-06-02 9:58 pm
  27. 2004-06-02 10:06 pm
  28. 2004-06-02 10:09 pm
  29. 2004-06-02 10:14 pm
  30. 2004-06-02 10:41 pm
  31. 2004-06-02 11:08 pm
  32. 2004-06-02 11:17 pm
  33. 2004-06-03 12:20 am
  34. 2004-06-03 12:26 am
  35. 2004-06-03 3:36 am
  36. 2004-06-03 4:15 am
  37. 2004-06-03 4:28 am
  38. 2004-06-03 4:44 am
  39. 2004-06-03 5:44 am
  40. 2004-06-03 6:06 am
  41. 2004-06-03 6:14 am
  42. 2004-06-03 6:15 am
  43. 2004-06-03 7:37 am
  44. 2004-06-03 11:36 am
  45. 2004-06-03 5:47 pm
  46. 2004-06-04 6:43 pm
  47. 2004-06-04 6:59 pm
  48. 2004-06-04 10:27 pm
  49. 2004-06-12 10:38 am