Previous month:
September 2008
Next month:
January 2009

October 2008

Comparison of Different Open Source Licenses -“With Comparison Chart!”

I was a little confused with which license to use for an open source initiative and the benefits and limitations of difference licenses, so I dug a little and here is what I have found. I hope this helps you with your selection of a license for your open source initiative.

Pretext

Previously I had my open source projects listed in SourceForge.net, and the last one I worked on was pretty long ago. Recently I took on a few more initiatives to release some of the libraries that I developed as open source projects and a new open source project for file synchronization. As a .NET person my first choice was CodePlex.com which is a great site with TFS and subversion and issue tracking support.

I am used to write the license myself for the software. However the codeplex site comes with a bunch of pre defined standard licenses and no option to write your own custom open source license. In order select a license I had to read all of these licenses and also read this cool book on licenses - Open Source and Free Software Licensing By Andrew M. St. Laurent from O’Reilly press (ISBN: 0-596-00581-4).

The Licenses In Discussion

I am going to discuss the following licenses:

1. The MIT License
2. New BSD License
3. Apache License
4. Microsoft Public License (Ms-PL)
5. Microsoft Reciprocal License (Ms-RL)
6. GNU General Public License (GPL)
7. GNU Library General Public License (LGPL)
8. Common Development and Distribution License
9. Mozilla Public License 1.1 (MPL)

The Basis of Open Source Licensing

Open source does not mean free software, but often is associated with it. Some licenses makes the software free for use, some licenses are to make sure that source is always distributed with the binaries. There are 2 items common among all of these licenses. Firstly the license must be distributed with the software usually with both binary and source code form. Secondly, the licenses have a warranty disclaimer. Having a warranty disclaimer is very important when you are making a free software. Since software creator is not making money out of a software it does not make sense to be liable for implied warranty. The warranty disclaimer releases the creator of the software from the liability of implied warranty.

Comparison Summary

The chart below shows a basic comparison of explicitly stated items among different open source licenses (click to enlarge)

OpenSourceLicenseComparison

Hope this helps to have an overview of the licenses

Simple Licenses

The MIT License

The MIT License is the simplest non restrictive open source license. It has only two parts, at the first part lets anyone use the software for free even it lets anyone publish, distribute, sublicense or even sell copies of the software. The second part is the disclaimer for warranty.

New BSD License

The new BSD license is as unrestrictive as the MIT license except for the fact, it does not allow the name of the contributors to be used to endorse any derivative software.

Microsoft Public License (Ms-PL)

The Microsoft Public License is similarly non restrictive as the previous two with the following explicit notations. Firstly, the license does not grant permission to the contributor’s name, logo or trademark. Secondly this license lets you royality free use of contributor’s patents that are used in the software but if you make any patent claim against any part of the software your license to the use of contributor’s parent is revoked.

Microsoft Reciprocal License (Ms-RL)

This license exactly as same as the previous one except that if you use any file from software then you must provide source for those files and the copy of the license and the other files in the end result software can be licensed under any term you want.

Common Development and Distribution License (CDDL)

CDDL is also a non restrictive type of open source license, but it has a lot of items explicitly described. See license details

Apache 2.0 License

Apache license makes sure that the software is free, the name of apache foundation cannot be used to endorse the product, any change to the software needs to be distributed in source form and it lets you provide warranty if you want to.

So read the licenses now and select the one that you like.

Complex Licenses

GNU General Public License (GPL) 

This is a highly restrictive license and any software that uses this license must also be distributed under GPL which makes GPL quite infamous and at the same time favorite to a breed of developers. There are several gotcha clauses in GPL. I am not going to describe it as there are many points to discuss. Please read it carefully.

GNU Library General Public License (LGPL)

This is a better version of the GPL license aimed more at the software components. It lets you have LGPL license for the component to be used in software while other components can have different licenses.  Both the GPL and LGPL allows the open source software to be sold as long as the source code is provided. Please read the license carefully before selecting it.

Disclaimer

Firstly I am not a lawyer, and this is my understanding from what I have read in the licenses and there is no guarantee that what I am writing here is correct since this is my personal interpretation. I would advice you to read the  licenses before you apply them and I do not take any responsibility of my interpretation.

kick it on DotNetKicks.com

A very simple C# interview question that most developer fails

We interview a lot of people and usually go through at least 3 interviews to select someone for the organization I work in. A recent trend of new developers is baffling me. The newcomer to development do not seem to know any of the basics. These newcomers might know some Linq, Ajax and famous frameworks but they fail at very simple OOP questions and fairly have very little or no idea about the CLR.

Anyway that is not the topic that I was going to write today, I have seen good candidates fail at a this question, which is basic knowledge. I don’t know why but this simple question baffles a lot of people. So I have decided to ask the readers this question.

Question:

How do you define a property read only for the outside world and writable for the same assembly classes?

For example I have a class named User where everyone outside the assembly can read the string ‘Name’ property but cannot set it. However the classes inside the assembly is able to set the property.  I am further detailing the exlanation.

User myUser = SomeClass.GetUser();

// OK for all classes since all can read it
string name = myUser.Name;    

// This line does not compile if this code is 
// written in a class that is not in the same 
// assembly as the type User. But it compiles
// if the code is written in the same assembly
// that contains the type user.
myUser.Name = "C# Developer"; 

Answer:

Now all I want is the c# code declaration for the property name that matches my requirement of being read only for the outside world. Write it in the comments section. I will answer the question 24 hours from now.

kick it on DotNetKicks.com