The CRAPL: An academic-strength open source license

[article index] [] [@mattmight] [rss]

Academics rarely release code, but I hope a license can encourage them.

Generally, academic software is stapled together on a tight deadline; an expert user has to coerce it into running; and it's not pretty code. Academic code is about "proof of concept." These rough edges make academics reluctant to release their software. But, that doesn't mean they shouldn't.

Most open source licenses (1) require source and modifications to be shared with binaries, and (2) absolve authors of legal liability.

An open source license for academics has additional needs: (1) it should require that source and modifications used to validate scientific claims be released with those claims; and (2) more importantly, it should absolve authors of shame, embarrassment and ridicule for ugly code.

Openness should also hinge on publication: once a paper is accepted, the license should force the release of modifications. During peer review, the license should enable the confidential disclosure of modifications to peer reviewers. If the paper is rejected, the modifications should remain closed to protect the authors' right to priority.

Toward these ends, I've drafted the CRAPL--the Community Research and Academic Programming License. The CRAPL is an open source "license" for academics that encourages code-sharing, regardless of how much how much Red Bull and coffee went into its production. (The text of the CRAPL is in the article body.)

To get things started, I've released all my research code under the CRAPL.

Why the CRAPL?

In academic software (my own included), software engineering principles vaporize as deadlines loom, and code becomes overrun with debugging hooks, perl golf, hard-coded configuration variables, dirty hacks, commentless tracts, a Gordian build system, and of course, no documentation.

It's not the kind of code one is proud of.

I think a lot of academics are embarrassed to release their code.

But, it doesn't matter. We should release our code, warts and all.

And, we should applaud people that do so.

When it comes time to empirically evaluate new research with respect to someone else's prior work, even a rickety implementation of their work can save grad-student-months, or even grad-student-years, of time.

Goals of the CRAPL

I'm not a lawyer, so I doubt I've written the CRAPL in such a way that it would hold up well in court. If you know a legal mind willing to help me "ruggedize" it, please have them contact me. (I am, in effect, releasing the CRAPL under the CRAPL.)

Caveats aside, I do think the current CRAPL captures the spirit of what we want out of academic software: it suitably warns the user and aggressively absolves the author.

If you're an academic, the CRAPL is an excuse to convert ugly software into good karma.

The CRAPL reinforces the notion that academics optimize research output by producing proofs of concept rather than commercial software packages.

And, it requires any modifications used to support published scientific research to be released back to the community.

The CRAPL also includes a good citizen clause: if you use someone else's CRAPLed software to complete your research, you should contact them before publishing your results. This gives the software's author the chance to inform you of any bugs they have found. More importantly, such exchanges open the door to potential collaboration and, consequently, better science.

The CRAPL says nothing about copyright ownership or permission to commercialize. You'll have to attach another license if you want to classically open source your software.

How to use the CRAPL

"To CRAPL" means "to release under the CRAPL." "CRAPLed" software is software that has been released under the CRAPL.

If you want to CRAPL your software, include the following in a file called CRAPL-LICENSE.txt.

                        THE CRAPL v0 BETA 1


0. Information about the CRAPL

If you have questions or concerns about the CRAPL, or you need more
information about this license, please contact:

   Matthew Might
   http://matt.might.net/


I. Preamble

Science thrives on openness.

In modern science, it is often infeasible to replicate claims without
access to the software underlying those claims.

Let's all be honest: when scientists write code, aesthetics and
software engineering principles take a back seat to having running,
working code before a deadline.

So, let's release the ugly.  And, let's be proud of that.


II. Definitions

1. "This License" refers to version 0 beta 1 of the Community
    Research and Academic Programming License (the CRAPL). 

2. "The Program" refers to the medley of source code, shell scripts,
    executables, objects, libraries and build files supplied to You,
    or these files as modified by You.

   [Any appearance of design in the Program is purely coincidental and
    should not in any way be mistaken for evidence of thoughtful
    software construction.]

3. "You" refers to the person or persons brave and daft enough to use
    the Program.

4. "The Documentation" refers to the Program.

5. "The Author" probably refers to the caffeine-addled graduate
    student that got the Program to work moments before a submission
    deadline.


III. Terms

1. By reading this sentence, You have agreed to the terms and
   conditions of this License.
  
2. If the Program shows any evidence of having been properly tested
   or verified, You will disregard this evidence.

3. You agree to hold the Author free from shame, embarrassment or
   ridicule for any hacks, kludges or leaps of faith found within the
   Program.

4. You recognize that any request for support for the Program will be
   discarded with extreme prejudice.

5. The Author reserves all rights to the Program, except for any
   rights granted under any additional licenses attached to the
   Program.


IV. Permissions

1. You are permitted to use the Program to validate published
   scientific claims.

2. You are permitted to use the Program to validate scientific claims
   submitted for peer review, under the condition that You keep
   modifications to the Program confidential until those claims have
   been published.
 
3. You are permitted to use and/or modify the Program for the
   validation of novel scientific claims if You make a good-faith
   attempt to notify the Author of Your work and Your claims prior to
   submission for publication.
 
4. If You publicly release any claims or data that were supported or
   generated by the Program or a modification thereof, in whole or in
   part, You will release any inputs supplied to the Program and any
   modifications You made to the Progam.  This License will be in
   effect for the modified program.


V. Disclaimer of Warranty

THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
CORRECTION.


VI. Limitation of Liability

IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

Contributions to the CRAPL

To kick things off, I'm CRAPLing all the source I could scrape off my back-up disks.

I kept telling myself that I'd clean it all up and release it some day.

I have to be honest with myself: this clean-up is never going to happen.

So, I'm releasing all the code "as-is."


The code for a recent submission of mine to the ACM Conference on the Principles of Programming Languages (POPL) is also available.

We got a 72X speed-up for 0CFA by mapping a small-step abstract interpretation onto the GPU through linear-algebraic operations.

It's simultaneously elegant and freaky.

The build system by itself merits the CRAPL.

I'm releasing the code because a 72X speed-up is an extraordinary claim. And, without our source, if anyone were to compare a new algorithm against our work, it would take them man-years (just as it took us) to figure out the low-level code optimizations that squeeze out every drop of performance.

Others using the CRAPL

Others have released under the CRAPL as well: