Wednesday, October 25, 2006

SET CLASSPATH=SUCKS

From Larry O'Brien's blog, God, I Hate Classpaths:
I've spent the past 3 hours trying to figure out freaking classpath issues: something about a ClassCastException from a org.apache.commons.logging.LogFactory. I'm giving up for the day. Stupid freaking classpaths.


The feeling is mutual, brother. I've recently lost plenty of hours to weird errors that turned out to be classpath-related. Maybe I've simply gotten used to putting all my assemblies in the same local folder (and not having to re-create that list elsewhere) or using the Fusion Log, which will tell you what the runtime is trying to load, even if it's hidden by another exception or a silent failure.

Wednesday, October 11, 2006

Upgrades...

I apologize for the recent feed duplications.  First, I upgraded to Blogger Beta (gone are the endless refreshes when "publishing"), then I started using Windows Live Writer (Beta).  In theory, everything should be good now...

...until the next round of betas, I suppose. :p

Comparison of Open-Source Licenses


Note

This is a copy of an essay I wrote for an assignment in the Open-Source Software Engineering course I'm taking. The deadline was yesterday, so it's safe to post today. :) I wrote this essay using Confluence, so the HTML is a little weird when I try to copy/paste it here. The assignment was:


Compare and contrast (1500-2000 words) the open source licenses MIT, BSD, GPL, LGPL, Creative Commons to the Eclipse Public License. Make sure to include a table (rows heading is feature, column heading is license) that summaries your discussion. Submit the answer to this question as an HTML document.

Feature to License matrix

# Feature name \ License MIT BSD GPL LGPL Creative Commons EPL
1 Number of paragraphs 4 6 56 69 Average of 31 20
2 Distribute modified/derived work? Yes Yes Yes Yes Depends on "nd" option Yes
3 Must release source?


Yes Yes

4 Must identify all modifications?

Yes Yes

5 Is attribution required? Preserve copyright notice Preserve copyright notice Preserve copyright notice Preserve copyright notice Yes Preserve copyright notice
6 Is endorsement or promotion permitted?
Not without permission

Yes
7 Is commercial use or distribution authorized?

Yes Yes Depends on "nc" option Yes
8 Allows re-licensing?

Only by special permission Only to GPL, or by special permission Depends on "sa" option Yes
9 Requires patents be licensed to recipients?

Yes Yes
Yes

Introduction

The open source licenses involved in this study have been analyzed and – although similar in the spirit of "no charge but no warranty" copyright licensing – were found to be primarily different in what they are specific or explicit about. It is speculated that this is representative of the values and interests of the license authors and therefore the level of detail surrounding a topic is assumed to reflect the degree to which the interests and values affected by said topic are important to the authors and the amount of effort willing to be exerted in order to ensure said interests and value are protected.

Examples of such interests and values are "equality", "merit", "freedom", "public good", "continuous improvement", "standardization" and "accountability". This analysis will examine these values, how they can be traced back to license features and finally how individual licenses emphasize these values by the use of the features and the requirements or conditions they attach to said features.

Features

The matrix, and correspondingly this analysis, only examines the major differences observed between the licenses. Similarities are outside the scope of this study. It should be noted, also, that the matrix only contains entries for feature-license pairs when such a feature was explicitly mentioned in the license. As identified in the introduction, the licenses aren't always specific on all features and a lawyer may be able to interpret the licenses according to the local laws to make a definitive determination for each feature. That said, even a "Yes" is slightly misleading as there are often conditions or requirements attached to the permissions before they can be implemented.

1. Number of paragraphs

Although one of the more questionable choice of features, it is actually pretty representative of the level of detail of the licenses. The count was done quickly, by hand.

2. Distribute modified/derived work?

Since all licenses permit royalty-free redistribution, the distinction here is whether the work can be distributed with modifications or as part of a derived work. This feature is present because the Creative Commons licenses can restrict this activity with the "nd" (No Derivatives) option.

3. Must release source?

This feature is more accurately the requirement of making available, upon request, the source code of any binary re-distribution, independent of whether the work was modified or not. It may be sufficient to make an offer for the source code or to pass on the same offer to recipients. The GPL and LGPL are explicit about this.

4. Must identify all modifications?

Also known as "delta notification", this is a requirement that modifications be traceable back to contributors, usually in the case of derivative works. Again, strong features of GPL and LGPL.

5. Is attribution required?

Another feature that appears to stem out of nit-pick, the Creative Commons licenses stand out in that they require more than simply preserving the copyright notice but to make efforts to link back to the original work. This could be considered a special case of delta notification.

6. Is endorsement or promotion permitted?

A special case of attribution, in the case of derived works the BSD license makes a point of requiring "specific prior written permission" before using the names of the original project's organization or contributors for promotional or endorsement purposes. The Creative Commons licenses give this permission by default, but section 4.a reserves the right to the Licensor to request credit be removed.

7. Is commercial use or distribution authorized?

This feature is about the license granting permission to use or distribute the work (or portions thereof) in a trade for something of value between two entities [3]. The MIT and BSD licenses are not specific about this and the Creative Commons licenses offer this permission as the "nc" (Non-Commercial) option.

8. Allows re-licensing?

It may be desirable, during the construction of a derived work, to license said derived work under different terms. The GPL and LGPL offer this possibility as an exception, the EPL offers it under certain conditions and the Creative Commons licenses grant it if the "sa" (Share Alike) option is not used.

9. Requires patents be licensed to recipients?

Where patents are concerned, the GPL and LGPL, through sections 7 and 11, respectively, state clearly that any patents owned by contributors be licensed royalty-free to all recipients, direct or indirect. The EPL, on the other hand, only requires that patents on contributions be licensed royalty-free when combined with "the Program", although the EPL joins the MIT and Creative Commons licenses in reminding the recipient that there is no guarantee the work does not infringe on patents owned by third parties. The EPL goes furthest by stating it is the responsibility of the recipients to acquire any third-party patent licenses that may be required for the use or distribution of the work.

Interests and Values

These values were derived from the perceived intents of the license features identified earlier and form the basis of the respective philosophy behind each license.

1. Equality

Equality is a social state of affairs in which certain different people have the same status in a certain respect.[1]

This form of inclusiveness aims to fairly make available the work to all possible recipients and ensuring this possibility through various conditions, such as ensuring the re-distributed work is licensed "as a whole at no charge" [2]. While this is generally the primary principle behind open-source licensing, half of the Creative Commons licenses stand out here because the "nc" option – identified in feature #7 – prohibits the use of the work in a commercial fashion and thus can be interpreted as introducing inequality. It could also, on the other hand, be argued that such a restriction may be an attempt to restore equality among non-commercial entities relative to their commercial counterparts.

Another factor potentially affecting equality is the Creative Commons licenses' "sa" option – identified in feature #8 – that seeks to ensure recipients have as much freedom with the derived work as with the original, much the same way sections 2b and 6 of the GPL and sections 2c and 10 of the LGPL try to ensure the propagation of the rights and freedom of the original work to all recipients at all levels of distribution.


Lastly, feature #9 ensures that no person or groups of person be excluded from using the work by having the GPL and LGPL require that all patents be licensed royalty free to everybody.

2. Merit

This value can be understood to mean the desire for recognition or acknowledgement, such that a reputation can be earned and preserved. We can especially see the expression of this value through feature #5 but also through feature #6 where the authors of the BSD license imagined the possibility of mis-use or of sub-optimal derivative works that could potentially – albeit unintentionally – reflect badly upon the original authors. We can also see a similar attitude with section 4a of the Creative Commons licenses where endorsement is considered granted in the form of the attribution requirement, but for which the Licensor has veto rights over.

It can also be argued that feature #4 helps support the notion of individual merit and reputation by the GPL and LGPL requiring that all modifications be identified, even though all licenses disclaim any warranties to protect the same individuals from damage claims.

3. Freedom

Although all open-source licenses generally try to increase the freedoms of the recipients, the most fervent in its attempts to do so is the GPL, especially through feature #8. This value is highly regarded as it can help avoid vendor lock-in where critical or popular fixes and improvements could otherwise be withheld, delayed or prevented by the original authors. There are obvious similarities to value #1 (Equality).

Feature #3 tries to make sure recipients (direct or indirect) are as able or free to make changes to the work as the original authors, provided some conditions are satisfied. Again, this is the stated spirit of the GPL and LGPL, although the latter trades a few freedoms – hence the "Lesser" in the name – to support value #6 (Standardization). Some Creative Commons licenses are definitely at odds with this value as the "nd" option could be seen as taking away freedom, relatively speaking.

4. Public good

It is seen as an effort to help the development of the greater community and encourage cooperation to emphasize elements of feature #3. Similar to value #1, this value distinguishes itself from Equality by not only providing equal access to the work, but to improvements to the work, such that said improvements are done cooperatively and as a community so as to best reflect the needs of the many. That is not to say that the act of not making available the source code hinders public good per se – although some may argue otherwise – but that the public good is best served when the source code is also made available.

Feature #7 can play a role here, in that allowing commercial use and redistribution may also help accelerate the development of a popular work, as the LGPL. One could also argue the applicability of features #4, #5 and #6 in that they could help identify fraudulent or sub-optimal versions of a popular work.

5. Continuous improvement

The permission to re-distribute modified/derived works (feature #2), coupled with the guaranteed freedom to make modifications (feature #3) help support this special case of value #4 (Public Good) where the software is able to be evolved and improved. This is where works licensed under the GPL have the best chance for continuous improvements and No Derivative Creative Commons-licensed content the least chance.

It could also be argued that the ability to make improvements in secret could mean there is less overhead involved and the improvements themselves progress faster, but such modifications may not be for the greater Public good. In those cases the MIT, BSD and EPL licenses offer that opportunity and similar, more "open" projects may be created to emulate the more secretive counterparts.

6. Standardization

It may be that it is important a work become popular or widely-used. In such cases, the "lesser" conditions attached to feature #3 by the LGPL (or by other licenses) may allow works such as function libraries to flourish by being used by more recipients than otherwise would be possible if said recipients had to also release their source code, even if it only used the original work. [5]

7. Accountability

Feature #5 helps identify the authors and contributors to works and feature #4 enables an order of magnitude better traceability to help establish exactly who did what, generally to help track down problems and/or defects with the work That information could also, in theory, be used to assign blame, although all licenses try to avoid this situation by providing no warranty of any kind and attempting to shield authors and contributors from damage claims.

The GPL, LGPL and EPL, however, have an exception that permits, through feature #7, the exchange of a warranty for a fee, under the condition that the warranty protection can not affect other contributors.

Lastly, although some patents are licensed for use as per feature #9, not all possible patents necessarily are. The EPL and MIT licenses are the only two that specifically point out the fact that third-party patents may need to be licensed, mostly because there is no warranty of non-infringement. The GPL and LGPL, on the other hand, are specific about obtaining royalty-free patent licensing from all involved parties before distributing the work.

Conclusion

As was demonstrated in this study, the licenses vary wildly in what they are specific or explicit about, which helps to emphasize the differences in values and interests shared by the authors of said licenses. It is thus difficult to fully compare the chosen set of open source licenses because they do not generally disagree on many points, but rather delve into different facets of those points at different intensities.

It is thus recommended that the choice of an open-source license for a new work be made according to the compatibility of the author(s)' values with those implied from the licenses. An abstraction at this level is thought to deliver the best suitability and match.

References

1. Social equality, Wikipedia. http://en.wikipedia.org/wiki/Equality_(law)

2. The GNU General Public License, Free Software Foundation, Inc. http://www.opensource.org/licenses/gpl-license.php

3. Commerce, Wikipedia. http://en.wikipedia.org/wiki/Commercialization

4. The Open Source Definition, Open Source Initiative. http://www.opensource.org/docs/definition.php

5. GNU Lesser General Public License, Free Software Foundation, Inc. http://www.opensource.org/licenses/lgpl-license.php

6. Licensing HOWTO, Raymond, Eric S. & Catherine O. http://www.catb.org/%7Eesr/Licensing%2DHOWTO.html

7. The Power of Personal Values, Posner, Roy. http://gurusoftware.com/Gurunet/Personal/Topics/Values.htm

8. Commerce, Wikipedia. http://en.wikipedia.org/wiki/Commercialization

Monday, October 09, 2006

DMA is a Good Thing (TM)

I was recently ripping audio CDs until I reached a point where it didn't work so well anymore. Symptoms: CPU usage would go through the roof (even after changing the process' priority to Low), my pointing device would be erratic, I couldn't play audio at the same time and the ripping itself didn't seem to go as fast as it used to.

Since the pointer was erratic, I suspected an interrupt problem. It turns out the drive had was now being accessed in PIO mode. I tried the usual "switch to DMA" trick, but it didn't work! Fortunately, I ran into this forum posting over at CDRLabs.com where the third post detailed a procedure which seemed less scary than the first one and which worked, to boot!

Quick recap, in case that forum vanishes into thin bandwidth (hardy har har), because everybody knows all the forums eventually get pwn3d by spoiled twelve-year-olds-who-should-really-be-doing-their-homework-instead-of-saving-the-public-good-from-useful-information-and-loitering-on-my-damn-lawn:


  1. Open your registry to the key:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}

  2. Navigate under the sub-key 0001 or 0002 (representing the primary and secondary IDE channels, respectively), whichever one represents the channel for which your device isn't getting DMA-enabled

  3. Delete the value MasterIdDataChecksum or SlaveIdDataChecksum, again depending on whether your DMA-deficient device is the master or slave, respectively.

  4. Reboot!



In conclusion, this momentary trip to the pre-DMA days really scared me and made me be thankful for DMA on this day of thanksgiving. I suspect one of my CDs was scratched or otherwise damaged and my operating system decided it was safer to switch to PIO mode.

Friday, October 06, 2006

Software Horror Stories

From Programming-Designs.com's forums:

Here are 107 software horror stories where making a programming mistake can cost you your job or even your, or even somebody else's life. Many of these listed provide links to stories about the horrific event while others contain book or magazine references where you can read more about them.


We heard of the worst of these in our Software Engineering course at Carleton U. Many of the events include a link to the RISKS digest, which is a must-read for every self-respecting software engineer out there.