Seeking advice on software licensing

Thanks to my time at Microsoft Research (1994-2002), I was able to live for a while (modestly) on asset growth. Last year I started working in earnest on two libraries, Reactive (functional reactive programming) and FieldTrip (functional 3D), plus some supporting libraries. I placed these libraries all under the most liberal license I know, which is BSD3. I’m more enthusiastic than ever about my functional programming work and am enjoying active involvement with the Haskell community.

With the recent economic meltdown, my old means of sustainable income ended, and now I’m looking for a replacement. I’m not yet in crisis, so I have time to make some thoughtful decisions and even take some risk. Rather than abandoning Reactive, FieldTrip, and related projects (some new), I’m looking for ways to continue these projects while building potential for future income related to them. At the same time, it’s very important to me to keep these projects open so as to advance purely functional techniques & tools, as well as to have enjoyable creative connections, and to get feedback & help.

For these reasons, I’m now considering licensing future releases of some my libraries for non-commercial use, with commercial uses to be arranged as separate licenses. I know almost nothing about licensing issues, because I haven’t been interested, and I’ve always wanted maximum freedom for all users.

So, I’m looking for help in choosing a software license that enables & encourages a creative community, while preserving opportunity to ask for some portion of return in future for-profit uses. If people have alternative perspectives how to achieve my goals without changing license terms, I’m interested in hearing them as well. I am not trying to “make a killing”, just a living, so that I can keep doing what I love and share it with others.

28 Comments

  1. Ryan Ingram:

    GPL?

    As long as the code is entirely your own work, or the rights to the work are sold/given to you by the contributor, the GPL freely allows you to license the software as non-GPL in parallel to some customers. It doesn’t prevent commercial use, but it does require commercial derivative works to be under the GPL or go through you.

    I feel like that gives a good balance between maximum freedom and giving you the ability to profit; as long as there exist commercial users who aren’t willing to release all their source code, they can license the code from you directly.

    The sticking point is that you need to own the copyright on any contribution; either you cannot accept patches from others (leading to potential forks), or you need them to sign over at least a portion of their rights as a copyright holder, so that you are free to license the entire product commercially.

    There are other “open source” licenses in which contributor’s work automatically reverts ownership to the creating entity; I think some Java licenses were like this. They tend to be frowned on by the open source community, though; you are effectively plundering the work of any contributor for your own gain.

  2. Tom Moertel:

    Consider using the dual-license model. For example, place your software under the GPL and offer other licenses to companies that want to build upon your software without contributing code back to the community. That way, you can keep your project open to community collaboration while retaining the opportunity to sell licenses to traditional, proprietary-oriented customers (i.e., the folks who would be interested in buying licenses anyway).

    Cheers! –Tom

  3. Marc:

    It may not be as free as you want, but the approach taken by Travis Oliphant (http://www.tramy.us/) seems interesting to me. “”Trelgol publishes material under a Market-Determined Temporary Distribution Restriction (MDTDR) model. Our emphasis is on the use of temporary content re-distribution controls to encourage payment of the creative work by those who have interest in its development. Working in this way we can quickly build a healthy “payed-for” public domain. Remember, the more people who can usefully trade in information organization, the more information will be made available.”"

  4. Achim Schneider:

    You might want to choose the Affero GPL (v3) over GPL, it would require e.g. a web app using reactive as part as its backend to publicize any changes to it. YMMV.

  5. Kari Pahula:

    Even with the most permissive license, you still have something that few others (nobody?) have: intimate knowledge of how the libraries work and the theory behind them. It may offer an opportunity to offer consulting services.

  6. Paul Delhanty:

    Here’s what I’m planning to do, as I plan my new personal lifestyle business based upon Haskell, computational geometry and font design:

    (1) BSD3 for non-strategic support libraries. For example, I am using Conal’s vector-space package and will probably make some small modifications. There’s no business advantage to me in those changes under GPL, so I would release them under BSD3. It also seems like good karma not to mess with the original license.

    (2) Dual license GPL3.0 (or later) and closed source for strategic core libraries – that is the old Qt model. For example, I am planning a purely functional b-rep modeller to be called Misaki. (Rather like Parasolid and Acis, but purely functional – initially 2D but later 3D too.) Misaki will power my own closed source code (3), but I would also like to share my ideas with the community, and also link it with 3rd party GPL code for demos (4). Further out, if the project got some traction, there might eventually be the prospect of licensing Misaki to companies for closed source development. (As Ryan noted, GPL does not explicitly preclude commercial use – it’s OK as long as the commercial use abides by the GPL. The companies that are OK with the using 3rd party GPL code tend to be service businesses like Ubuntu for example.) One should note though, this dual license code cannot depend on 3rd party GPL code. So, for example, if someone were to fork Misaki and publish the changes under GPL3.0, I could not dual license that code, unless that person assigned copyright to me.

    (3) Closed source for other strategic code. For example, I am writing a font editor for CJK called MojiMagic. It will be powered by Misaki-2d from (2), for which I will grant myself a closed source license. I’d like to open source MojiMagic too, but I don’t have a viable business model for that.

    (4) GPL3.0 for demo code. For example, maybe I’d like to integrate Misaki-3d from (2) with the modelling package Blender, which I think is GPL2.0 or later (would have to check). My dual license from (2) allows me to do that and I release my integration code under GPL3.0.

    GPL3.0 is more restrictive than GPL2.0. I will have to check out Achim’s recommendation for Affero GPL3.0.

    LGPL does not play well with Haskell – there is a thread somewhere – and even the FSF don’t love it.

  7. Jake McArthur:

    I am not a big fan of the GPL, but your best bet is to probably use a dual licensing scheme: GPL and a commercial license. This, unfortunately, would rule me and others out as users of your libraries, since I would rather release all of my stuff under the BSD license, but I have yet to think of a reasonable way to allow open source projects to loosen the license without losing your commercial edge in the process.

    Alternatively, you could keep Reactive and FieldTrip under the BSD license and create commercial products that use those libraries, rather than making those libraries your commercial products themselves. This is a lot more work, but I also think you are more likely to make money this way, and it also would allow you to keep your contributions to the open source and function programming communities as generous as possible.

  8. Robin Green:

    Maybe apply for a grant? NSF? DARPA? You don’t have to be attached to an academic institution, at least not for DARPA.

  9. LA:

    Hi Conal,

    Do you have any examples of code/projects that have successfully developed along the lines that you are thinking?

  10. sclv:

    If reactive develops properly as a semantic model, it has the potential to be adopted very widely. I’d hate to see licensing issues stand in the way of that. On the other hand, graphics, ui, etc. on top of that will only be used by one or another actual program (while reactive itself could be the basis of any number of event-driven models). Maybe a good compromise would be to have a BSD reactive-core as a standard implementation of the semantics, but to dual-license adaptors where appropriate, any gui-specific things, fieldtrip, as well as any further projects based on them?

    As earlier posters noted, this would mean taking care that copyright of all patches you accept is assigned to you.

  11. Anonymous:

    Please not the GPL – I and others cannot/will not use the GPL because it forces our programs to be GPL.

    Try the LGPL? Then derivative works have to be LGPL, but not linked libraries.

  12. conal:

    sclv — Thanks for that suggestion. Enabling people play with FRP is important to me.

    Reactive is by far the trickiest thing I work on. It’s much more delicate & challenging than my numerous previous FRP implementations. And it’s the culmination of my contemplating & implementing FRP and its predecessors for nearly 20 years. Getting the semantics implemented correctly is easy — given the number of similar systems I’ve built. What’s special about the Reactive architecture is its much greater scalability through efficient, data-driven execution — without breaking semantics, as other systems have (including my early attempts). In other words, it really has been and continues to be quite an investment getting this core nailed down. And as you point out, quite a pay-off in general applicability as well, which is what motivates me.

    Adapters are pretty simple by comparison. And intentionally so, since there will be many of them.

    Some dilemma. I’m grateful for community input to help sort it out. And for visibility of the process, to help others in similar situations.

    It’d be easy to bang out a demand-driven implementation that has exactly equal interface and semantics. I don’t know if that’d help.

  13. conal:

    Please not the GPL – I and others cannot/will not use the GPL because it forces our programs to be GPL.

    Anonymous (and others) — I’m very sympathetic with this consideration (GPL contamination). What (non-GPL) licenses would you like your programs to have?

  14. conal:

    Do you have any examples of code/projects that have successfully developed along the lines that you are thinking?

    Hi LA. I’m way too new to even thinking about licensing to have such examples. Perhaps Qt is one example, though I have no idea how successful Qt is, technically or commercially. It seems to be the canonical multiple-license poster child. There are some license-related links on the Qt licensing page. I’m personally very uncomfortable about this part:

    You must purchase a Qt Commercial License from Qt Software or from one of its authorized resellers before you start developing commercial software. The Commercial license does not allow the incorporation of code developed with the Open Source Edition of Qt into a commercial product.

    I’d love to hear answers to this question from other people. What success stories do you know of for software that is free for non-commercial use and available for non-free commercial licensing.

  15. Paul Delhanty:

    If you BSD3 all the tricky stuff (Reactive for example), and the integration is pretty simple (writing adapters), then, unfortunately, you don’t have even much of a consultancy business left.

    For the consultancy model to work, Reactive would be very powerful (sounds like it is) so that it was attractive, but an absolute dog to integrate (sounds like it is not) so that lots of expensive consultancy would be required. Think Enterprise Java for example – Marc Fleury et al’s JBoss was a good service business on a GPL core, which they sold to Red Hat.

    One other point is that you can’t unlicense code that you have already released, so if you were to make the license of future versions of Reactive more restrictive than BSD3, you may have to compete against forks of the current Reactive BSD3 code base. That would be either other companies competing against you, or potential customers avoiding your license fees.

  16. Paul Delhanty:

    Qt is one example, though I have no idea how successful Qt is, technically or commercially.

    Nokia bought Trolltech for Qtopia rather Qt – Qt recently went LGPL. Qt revenues funded the initial growth of Trolltech though.

    I’m personally very uncomfortable about this part:

    You must purchase a Qt Commercial License from Qt Software or from one of its authorized resellers before you start developing commercial software. The Commercial license does not allow the incorporation of code developed with the Open Source Edition of Qt into a commercial product.

    I think that statement is completely bogus, and not even good business. It is not part of the license – just commentary on the license. What would Trolltech have done if a potential customer had been openly evaluating Qt for closed source use under the GPL? (That would be perfectly legal, even for companies the GPL only starts to matter when one redistribute the GPL’d code.) The potential customer then decides they like Qt and goes to Trolltech sales and says that they would like to buy 50 commercial seats. Rank the following from most likely to least likely:

    1. (1) Trolltech sues the potential customer.
    2. (2) Trolltech refuses the business, but does not sue.
    3. (3) Trolltech takes the money.

    My answer would be (3), (2), (1).

    It is arguable that Qt would have been more successful without the clause scaring potential customers away.

  17. Robert Burrell Donkin:

    I think you need to consider a broader strategy than just licensing. The majority of open source developers I’ve know who’ve been at it seriously for more than 5 years now earn a professional living from activities related to it. This means investing energy on activities which are not direct development. You may need to start speaking at more conferences, lead workshops and training, try to get a deal for a new book, write more articles and so on. You may want to talk to a FOSS integrator (like RedHat/JBoss) about consulting.

  18. sclv:

    Dual-license reactive then, but (and I don’t know if this is necessary), BSD the “interface”? Then, even if you don’t do it yourself, others could be encouraged to write a simple, demand-driven, inefficient (but not buggy or leaky) version. So it’s easy to think with and play with, but for serious applications the better version is necessary.

  19. LA:

    Yeah, I would agree with Robert Burrell Donkin. Empirically there doesn’t seem to be a lot of open source code that has supported a business along the lines that you describe. The examples that come to mind are either full products that provide a solution to a fairly well understood problem (eg Qt, SleepyCat) or the basis for enhancing a consultancy type business.

  20. Joseph:

    Hey Conal. You’ve got quite a thread started here!

    I also strongly agree with Robert Burrell Donkin. I think that you can maximize your personal value by keeping the license open and fostering a growing community. JBoss and MySQL are great examples of very successful outcomes from this approach. Keep things free and unencumbered for the community, and offer consulting services and a commercial license for enterprises which need support.

  21. conal:

    Joseph — Hey there, little brother! I didn’t know you watched my blog. :)

  22. conal:

    Robert Burrell Donkin wrote:

    I think you need to consider a broader strategy than just licensing. The majority of open source developers I’ve know who’ve been at it seriously for more than 5 years now earn a professional living from activities related to it. [...]

    Joseph added:

    Keep things free and unencumbered for the community, and offer consulting services and a commercial license for enterprises which need support.

    Thanks for bringing in this angle. I’m puzzling over how it might apply to my work.

    What I’m most dedicated to in my work at is creating software that is simple to reason about (understand precisely) and to use. It’s a tremendous effort, and it’s my mission.

    In order for free software to generate consulting & support business, I imagine the software has to be tricky/complicated to use. Is that so?

  23. Paul Delhanty:

    In order for free software to generate consulting & support business, I imagine the software has to be tricky/complicated to use. Is that so?

    That almost sounds like a defintion of the word enterprise in the term “enterprise software” – free or non-free.

    I’m not recommending you go the route at all though. Personal integrity matters and ultimately will probably prove to be good business.

  24. Achim Schneider:

    Things being simple doesn’t mean that companies won’t pay for support: They are looking for straws to cling onto (and people to blame) should things not work out as planned. Still, I don’t believe that these kind of companies are likely to use reactive and/or fieldtrip in their raw form, in the first place. A webserver or 3d modeller would be a completely different thing.

    But then, if you interpret consulting as mostly training and advice, you might be able to earn bucks by explaining people how to design — in general or for a specific application — programs without falling back into pre-FRP patterns. Add a little viral marketing via a google techtalk and…

  25. Barak A. Pearlmutter:

    2nd the comment by Ryan Ingram.

    The objection raised by Anon (“Please not the GPL”) were already addressed in Ryan’s comment: if you don’t like the GPL you need to cut a separate deal, probably involving money flowing to Conal. That is the point!

  26. Tim S:

    iphone apps are the flavor of the month. I don’t know the rules precisely at the moment (i.e. will Apple allow you to charge for an app released under a free license?), but it is clear that users would pay for apps on an iphone without regard to license. At least for now. I’m quite sure they would even be willing to pay for GPL software on this platform at the moment. So make an app where the user is actually programming with TVs or whatever. Even better, make it a social app, say a game where they must reason about advertising. VCs will flock to you. You”ll love it. They’ll love it. The only question is whether someone else can load the same code in the iphone store. But you will always be two steps ahead.

    The above might sound facetious, but it is only half so. This is a growth sector at the moment. Think outside the thunk. :-)

  27. Dan:

    Um … isn’t this what tenureship is for? ;-)

    I think you should talk to the major functional software houses/groups (Galois, various banks, and Jane Street come to mind) and see if any of them want to publicly “sponsor” your development of Reactive, under the original BSD license.

    Many of these shops are a) Trying to attract functional programmers and want the name recognition of sponsoring one of the coolest ideas out there b) Wanting your expertise if they use the product (I can imagine Reactive would be quite useful to a bank) c) Open to the bleeding-edge

    Slapping their logo on the website, and getting consulting hours and gratitude from you accomplishes all of these things.

  28. Dave Crossland:

    “Anonymous (and others) — I’m very sympathetic with this consideration (GPL contamination). What (non-GPL) licenses would you like your programs to have?”

    The fear of “GPL contamination” is what the business of dual licensing GPL code is based on; you use the GPL version as a ‘try before you buy’ marketing tactic and put the software freedom community to use as a marketing team. The stronger the copyleft (ie, Affero GPLv3 is the strongest) then the higher the conversion rate on the non-GPL license will be.

    Given this post is now many months old, perhaps you could make a new post reporting how things have gone? :)

Leave a comment