Thursday, February 15, 2007

License to License - A Question Of

Yes, I ended the blog title on a preposition, but I omitted needless words.

With the Mynx project there are two major elements:

  1. Mynx programming language manual (MPLM) “Mynx book”
  2. Mynx compiler/tools
  3. Mynx libraries

Each requires a formal legal permission for use of some kind, the infamous legality -- a license.

Mynx Programming Language Manual


For the Mynx book, there were four options:

  1. Copyright with All Rights Reserved
  2. Public Domain
  3. Creative Commons
  4. GNU Free Documentation License

From what I’ve read, a standard copyright and Creative Commons are approximately the same - fair use, cite the source and author for credit, and possibly restrict the use to non-commericial uses and no derivatives as specific permissions. Some criticism of Creative Commons in the open-source and free software movement has been directed at the fact. Creative Commons seems to formalize this as a license - and is good for online blogs and web pages (at least in my opinion), which is why I'll use it for just that purpose. But some criticism of Creative Commons points Creative Commons states the obvious of a copyright, and therefore is a license of no license.

Public domain is ultimately where a copyrighted work goes - a contribution to human knowledge (although intellectual property issues, and such laws as the Digital Millenium Copyright Act (DMCA) are changing that...). But public domain relinquishes control over the work, how it is used, how it changes.

Originally, the GNU Free Documentation License seemed problematic (see the Debian Linux discussion) but the issue of invariant sections is simple. If invariant sections are problematic, then do not use them. The invariant sections make sense to me though, if elements of the documentation should remain constant, such as references, credits, and design rationale. So using the GNU Free Documentation License seemed the best choice for the Mynx programming language manual. As the author and copyright owner, I'm open to new material, contributions, and so forth -- another version of the MPLM that would incorporate the changes, and supercede the previous MPLM. In fact, Debian opted to use the FDL.

Mynx Compiler/Tools and Mynx Libraries


There are a dizzying plethora of licenses to choose, but for my own work the question of license was among a quadruple of licenses.

  1. Public Domain
  2. Proprietary License
  3. GNU General Public License (GPL)
  4. BSD License (BSD)

Both the compiler/tools and software/libraries are similar, only the libraries are used as a part of applications and other libraries. The compiler and tools are used to write and create software, but not an integrated part. The distinction is important in selecting a license.

Public domain license has the problem in software as in documentation - loss of control, and for a programming language can lead to fragmentation of the language in different variants and flavors -- consider what happened to the Pascal programming language. The compiler in Pascal was copyrighted, but the software for the compiler was not licensed except freely in the public domain. Pascal became widely used but fragmented in many a different flavor.

A proprietary license would have to be created, and even then the software is restricted, going to another extreme opposite from public domain. The whole value of a programming language is in its ubiquity, so a proprietary license is not compatible with that goal.

The licensing issue boils down to two licenses - GPL and BSD. Both are open-source, promoting dissemination and ubiquity. The major difference is that GPL requires open-source under the same terms if changes are made, whereas BSD any improvements or changes can be made but not released or licensed under the BSD license. BSD is use and give credit, but no “reverse information” unlike the GPL license.

In some online forums and discussion groups, the supporters of the BSD license often focus on the “right to not restrain my or others right” to give changes back under the same terms. Using the BSD license also acts as a “freebie” - you can modify and keep the changes private, only credit the original creators.

But I beg to differ -- as the creator of the software, I can determine the legal guidelines for the use of my work. And, more to the point, I can also license per case non-GPL license of my work to specific individuals. But for the anonymous public users in general, GNU GPL is a means to ensure changes to the original work do not disappear into the shadows of proprietary intellectual property in the language or the compiler. The BSD license is open-ended, so changes can go private.

The two things I fear about Mynx are the idea of proprietary extensions incompatible with the core language, and embrace and extend approach to adding specific features to the compiler. In the case of the Pascal language proprietary extension was to add needed features to a impotent language, but in terms of a software license its to avoid specializing software into a proprietary variant of language or compiler.

By giving the software as open-source, I want it to stay open to the general public using the language--the power of the language is in its widespread use.

And there are those that might download, build, and use the Mynx compiler, but never make changes thus never have to give something back as there is nothing to give back. But the users of the software can’t just change the name, give me credit, and distribute a new variety of compiler either.

For libraries that are used, and the problem with mixing open-source with proprietary or incompatible licenses, I think the Classpath Exception works well.

Synopsis


So to summarize--for Mynx, the licenses for the elements of the project are:

  1. Mynx book/MPLM - GNU Free Documentation License
  2. Mynx compiler/tools - GNU General Public License
  3. Mynx libraries - GNU General Public License with Classpath Exception.


Using both GNU licenses has the added advantage of simplicity. One final consideration was existing software out there, and I opted to err on the side of caution. The GNU C (GCC) project are released under both GNU licenses, so from the long-term experience in practice in widespread ubiquity, was the compelling factor in line with the goals of the Mynx project.

Labels: , , , , ,

Thursday, February 08, 2007

Features de-featurized or "plutoed" from the Mynx programming language

I've finished the Mynx book, but in revising the Mynx language manual, I noted some features as I've been implementing the checks for the semantic analyzer in the compiler.

Some features of Mynx are "creeping featuritis" and need to plutoed or de-featurized.

It struck me that I was "over-building" Mynx as a programming language, forecasting problems and putting in a feature in anticipation -- instead of a language feature to write software.

In the immortal words of Homer Simpson... "doh!"

The over-built features of Mynx were:

  1. 'self' as an abstract, but implicit runtime type of a class.
  2. accessors to access class attributes.
  3. abstract methods in generic classes.
  4. 'own' as static method in a virtual class.

Each feature had its specific intent for its inclusion, but more compelling reasons indicated the need for exclusion -- problem prevention, not software creation.

Using a metaphor a programming language is a palette of concepts and abstractions for a software developer's mind to use to paint a canvas in software.

Over-built features are trying to avoid mixing hot pink with foghorn gray by
providing a feature of foghorn pink instead.

This exercise in create, analyze, remove has emphasized the need for conceptual simplicity in a programming language. Not simplicity in fewer statements or keywords, but concepts and how well they mesh together into a cohesive whole.

Fred Brooks in the book "The Mythical Man Month" wrote about "conceptual integrity" and stated "I believe the hard part of building software to be the specification, design, and testing of this conceptual construct, not the labor of representing it and testing the fidelity of the representation."

More simply (for what its Wirth...err, worth...) Niklaus Wirth said when you add things to a language, throw away other things.

In the case of Mynx, as the language designer, I added complexity in the form of features to prevent possible problems, rather than focusing on the features for utility. Experience is the best teacher, one of the reasons I embarked on creating and implementing a new programming language.

Labels: , , ,

Website Spy Software