Search This Blog

Thursday, October 30, 2014

Introduction to Software, Licensing and Proprietary Software

Software by definition : - is any set of machine-readable instructions that directs a computer's processor to perform specific operations.

Software makes the hardware usable and vice versa. Hardware means the physical components of any computing platform, may it be your laptop,desktop, phone or tablet. Software running on them makes the hardware usable and without the hardware software would be useless.

Software and hardware complement each other, Hardware is completely Static entity where as Software is dynamic.

One can't change anything about the hardware after initial purchase. We could replace a few components however, those would also be static in nature, we can't manipulate the internals of the hardware. On the other hand we could modify the software if we wanted to or If we were allowed to and provided with the source code. We will discuss in greater details soon.

After clarifying the basics lets move on and discuss the origins of computer software, rather computers themselves.

History of Computers and Software

So a long time back when Computers were of sizes comparable to a small building, Software was hard to come by and just like the computer systems themselves was very expensive.

Like the definition of Software itself says, it is a set of machine readable instructions, so if it is a set of instructions, it needs to be written in some language, Some language the computer's processor understands.

So what language does a computer's process or understand ?? It understands only one language. 

0101010101010001001010010100010010000010010101010101010101010001001010100100101001001000100100101001001001001010

Puzzled ?????... It is true, Computer's process or is basically dumb !! it just understands a language or zero's and one's. A computer can do anything you want as long as you could write the instructions in 0101010 format or BINARY LANGUAGE. Computer are excellent in executing the given instructions. They don't care what the instructions say, they just execute them without fail.

We can't read or write such language, so what is the solution. The solution is a PROGRAMMING LANGUAGE. This language has characters that humans can understand, like Alphabets and Numerals. We can write instructions with this language which then get converted into a stream of Zeros and One's so the computer could interpret it and execute the instructions.At that time the only programming language available was Assembly Level Programming Language or simply Put ALP. ALP is a programming language which talk at very low levels to the Processor and results are very fast. The assembler program converts the instructions to executable code which the processor then executes. 

Pretty Simple Right !!!!!

Well, in the early days of computing things were really complicated, one had to write programs in ALP which was very complicated and time consuming.

Since programming required so much time and effort, Computer software became very Expensive.
Things continued like this for quite some time, Advancements in technology were slow and only language at disposal was ALP. All software was written in ALP or something similar and low level.

Thing were like this until 1972-1973 when a Computer Genius at AT&T Bell Labs Laboratories made a ground breaking invention. His Name was Dennis Ritchie and he invented the language C along with Ken Thompson, It was called C because it was derived from an already existing Language B at Bell Labs. So the next logical name after B would be C. C was written in ALP and its purpose was that it was a piece of software designed to build more software. 

It was a new Programming Language for computer software. 

Today C is like mother of all programming languages, almost all programming languages borrow something or other from C. Languages like Python are completely written in C. UNIX was written in C Linux is written in C. C is not as low level as ALP however it is low level enough to provide optimal speed and ease of programming. It is a trade off between speed and ease of programming and the speed reductions are not as much. Programs written C  are the fastest.

After C surfaced a new revolution started and software development say and unprecedented explosion. Software was being built at a very fast rate.

C is just one of the programming languages there are many other for different purposes.

Now we had the programming language we all wanted so bad, and we started writing software. Software for almost every computing task, Life became easy and work was done easily and quickly.No doubt software solved so many problems for us however it also gave birth to a few. Lets take a look what happened.

Enter Proprietary Software

The Problem was that Software was now a property of the developer. The developer was the owner of the Software and since software development was new in town and it was making a lot of things easier, It became all the more a property of a developer and the developers started charging Money for their software.

It was fine because the person who built the software spent long hours coding the thing and everyone need to pay bills so that money part was understandable and OK.

The real problem was the License. Which had big implications. You owned the software but you could not change anything about it. All you could do is use it as per the license that is all you get even after paying so much money.


License by definition means :- A software license is a legal instrument (usually by way of contract law, with or without printed material) governing the use or redistribution of software

Software license became a means to sell the software and make money. Huge enterprises sprung across the globe building this kind of software, this is termed as Proprietary Software.

You pay and you get to use the software and you don't see the source Code, you can't modify or distribute proprietary software, because its license says so. One could be sued for violating the license.

Problems with Proprietary Software

Like explained earlier, Proprietary software gives only limited freedom, You need to abide by the license all the time, and you do not get to see how the software works, How it was built. The real meat of the software is hidden at all times. What we see and get to use is the pre-compiled software, ready to be installed and used, with no ability of viewing the Source code.

Source Code :-- Source Code has been referred to a couple of times, so lets take a look as to what the Source Code is.


Source code is the actual set of instructions written in the programming language of the developer's choice, C C++ or python or any other language. This si the real software that actually tells the computer what is it intended to do.

These instructions are generally written in a text editor and saved in a text form which is kind of useless to the computer in such form. These text files are in reality the actual software, one could make changes etc. to these text files to improve the software or to fix any bugs.

Software in this modifiable form is called the Source Code.

When we use the software we do not use the Source Code, we rather use some Executable file, Something which we can click and launch or we could cal from a command line or something which is in a form which can be executed directly by the computer's processor. This form is called as the Binary or the Executable form.

How does the software become executable/Binary?

It involves a process called as compiling. In this process we run the instructions through a compiler. The compiler then compiles the Source Code.

During Compilation, the Compiler tells the computer's processor every single instruction on the Source code file. Compiler then checks the code for any errors etc. If there are any errors, the Compiler highlights them and the programmer corrects them. The process is iterated till the final result is achieved without any errors.

During this process, the compiler records the execution of the Source Code and converts the result into a new file which is self executable. That file is in the Binary/executable form.
This file no longer needs the compiler to compile the Source Code again, The Execution is recorded once and the binary can be used over and over again. This is the Executable /Binary for of software

Proprietary Software never distribute the Source Code, They just distribute the Executable files/Binaries of the software with an Installation program which installs the software. It also include the license as well.

Proprietary software can burn a hole in our pocket and yet all we get are the binaries. On top of this we can't use it the way we want, We can't change we can't modify or redistribute it.

We always need to abide by the license agreement or else.... :(

We all know what happens otherwise

This was an introduction to Software, Licensing and Proprietary Software. In my next Post I will discuss about something very Interesting .. FREE SOFTWARE. Stay tuned.

Please do leave your comments below.

Thanks,