fíam

(rhymes with liam)

  • Postback: Why I choose AGPLv3 for my code

    Aug. 29, 2008 at 11:25:23 CEST

    It's been a few days since I posted my decision to release all my code related to Django under the AGPLv3 license. It generated quite a few reactions I didn't expect, so let me tell you the full story.

    It all started when I needed to support, let's call it technology X - which is pretty hot right now -, in byNotes. I first searched if someone had done it and I found there was a generic and abstract Python implementation, but it needed a lot of work to be adapted to Django. So I decided to build my own solution from scratch. The same day I released the first version, I found an announcement posted the previous day from another developer who had also coded technology X support for Django. It's a pity when that happens, since one of us could have spent that time implementing technology Y. However, it's difficult to avoid those situations, so we must live with it.

    The bad thing (TM) happened a few days later, when I was chatting with a friend on freenode. I told him I've written support for technology X and it could be useful for a project he's working on. He told me about a relatively popular site - I didn't know it was built on Django - which had been supporting technology X for a few months. I checked the site and I found nothing about the source code for technology X, even when it's something potentially useful for a lot of sites.

    I don't blame them for not releasing their technology X implementation, after all they're free to do what they want with their code as long as they respect the licenses for other projects or frameworks they may rely on. However, the Django community lost something in this scenario. If relatively popular site had released their implementation of technology X, the other developer would have worked on Y while I would have worked on Z. Django would now have support for X, Y and Z, but thanks to the decision of relatively popular site to keep their implementation of X closed, we now have 2 free implementations of X. And that hurts the community, since now someone will have to spend time working on Y and Z instead of doing another things.

    Are you starting to see my point? Now, with my code released under AGPLv3 instead of BSD, any site using it would have to contribute their changes back. So, if they improve my implementation of technology X, I can spend more time working on technology Y and that benefits the Django community.

    I fail to see how this is being greedy. And if, as someone suggested, my code is so trivial, there's no problem reimplementing it. Anyway, I didn't claim my code does something extraordinary. In fact, I'm sure anyone could implement it. When I release something I've written, my intention is not rocking your world, but saving you from wasting time. If I've already written support for X, you're better working on Y instead of reinventing the wheel.

    However, I'm not totally happy with the AGPLv3, because of its viral nature. I would be fine with something like the LGPL but with the Affero clause and I'm sure I'm not alone. Id est, you may link closed source code with my software, but you must release any modifications you make to my code. However, there's no such license for now, so I have to use AGPLv3. Do you want this to change? Spread the word, I'm sure a new license by the FSF combining the LGPL with the Affero clause it's going to benefit us all.

  • AGPLv3 explained

    Aug. 28, 2008 at 01:20:54 CEST

    I think there are lots of people which misunterstand the Affero GPL v3, so I decided to write this entry to clarify some things.

    Keep in mind I'm not a lawyer, so you should read my advice with a grain of salt. I've been using free software licenses for some years and I always take the time to read and understand them, but that doesn't mean I cannot make mistakes or misunderstand some sections.

    You can

     
    • Sell commercial software under an AGPLv3 license: Nobody prevents you from selling AGPLv3 licensed code, even when you didn't write it. However, customers buying the software from you must abide by the license terms. Paying for an AGPLv3 product doesn't mean you can avoid the license terms. However, if you're the copyright owner, you can sell the same software under a different license.
    • Build another software on top of it: AGPLv3 grants you permission to download and modify any software which you can use, even if it's over a network (this an important difference with the GPLv3). You're free to modify it or use it into another project, making your project a derivative work of the original software.
    • Link to or use BSD licensed code: 3-clause BSD licensed code (don't confuse it with 4-clause BSD license) let's you use or import it into AGPLv3 projects. You can also distribute both codebases as a single package. However, keep in mind that you are not allowed to change the license in the file headers nor claim copyright over the external project you imported.
    • Look at code under AGPLv3 license, even when you work on projects with more restrictive licenses: AGPLv3 is about code freedom, not about patents nor algorithms. You're free to look at AGPLv3 code and then do a clean-room reimplementation of it.
    • Use GPLv3 libraries: Using a GPLv3 library doesn't impose additional restrictions over the library nor over the AGPLv3 code, so there's no problem here.
    • Use LGPLvx libraries: No version of the LGPL imposes any restrictions over the code using it.
     

    You can't

     
    • Write BSD or closed source software on top of it: AGPLv3 is designed to keep the code always free, so you can't use nor import AGPLv3 code into a closed source project.
    • Copy AGPLv3 code into another project under a non-AGPLv3 license: Even a single line. It's no allowed, because you're bypassing the license term under the code was released.
    • Mix GPLv3 and AGPLv3 code: This may seem counterintuitive, but it's true. You can't make a GPLv3 derivate work and an AGPLv3 software, since you're removing the obligation to distribute the source to users over a network. On the other hand, you can't add the Affero clause to a GPLv3 codebase, since you're imposing additional restrictions on it. The same applies for GPLv2.
    • Use GPLv2 libraries: GPLv2 only libraries don't allow you to use them in GPLv3 projects, so you're in the same case when using AGPLv3.
     

    You must

     
    • License your derivative works under AGPLv3: If you modify AGPLv3 code or use it in another project, the resulting code must be under an AGPLv3 license.
    • Provide a way to download the code over the same medium used to deliver the software service to the user: If you run a website which uses AGPLv3 code, your pages must provide a link to the software you're running in the webserver (zipfile or version control system, it doesn't matter).
     

    For Django developers

    Django is released under a 3-clause BSD license, so you're free to build AGPLv3 software on top of it.

  • Why I choose AGPLv3 for my code

    Aug. 24, 2008 at 23:29:06 CEST

    From now, all the code for Django applications I'll be releasing will be under AGPLv3, which means every application using them will need to be under the same license (which requires your code to be available). You may be thinking why I'm doing this, so I'll give you an explanation.

    I've recently spotted some freeloaders in the Django community, and that's something I usually don't like. I understand that making your code available doesn't always makes sense, because sometimes your application is too vertical and the only ones benefiting from your code are the ones who are competing with you. But if you write something which could potentially benefit hundreds of sites which don't compete with you and you choose to make it closed source, then you're not going to get my code for free.

    Keep in mind that I'm not preventing you from building commercial products with my code, as long as you release your work under AGPLv3. I don't have any problems with people making money off my work, as long as they give something back.

    However, as I mentioned, sometimes I can understand your situation. If you want to use this code to build a non-AGPLv3 product, you can email me and ask me for an snapshot under an exclusive commercial license under the following situations:

    • You're an open source developer and I can verify you've given something valuable to the community. Sometimes you have to build some closed-source products to help you pay your bills and that's fine.
    • You're not an open source developer, but you've helped the web community working on open standards. I'm also fine with this.
    • You're willing to pay me some money. I also have some bills to pay.

    If you don't fall in one of these cases, don't waste your time emailing me.

    I know I've left behind people building BSD licensed products (free software, but incompatible with AGPLv3), but this is the only I can do to protect my code from freeloaders.