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 that 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
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 0 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 verfied, 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: