Why Powered USB Is Needed? :The Short History of USB

This article describes a version of USB that is not related to the new USB 3 spec that Intel has released for 2010 products

The Universal Serial Bus, or USB, is right now the most common serial peripheral bus in existence. Allowing all the most common devices to connect to your computer, to each other, through hubs, and now even wireless USB has become the dominant method of low bandwidth communications between devices and their peripherals.

However, USB is not without flaws, in fact, it has tons of issues that other less accepted standards have already solved, and USB has either not solved them or solved them only recently. One of those problems is that, although USB does provide electrical power to peripherals, it is rarely enough to run devices that suck juice like no tomorrow. Powered USB exists to solve this problem.

300px-SanDisk_Cruzer_MicroI will tell you why Powered USB will never be widely accepted, and also why we need it. However, to do so, this article is split into two three parts: the first part discusses the history of USB and previous peripheral ports, and why it it became widely accepted, the second part contains the meat of my argument on why Powered USB is both needed, yet failing to be accepted, and the third part describes a possible future USB 3 specification in detail.

This is part 1. Part 2 is available here, and part 3 is available here.

Short History of Common Yet Totally Incompatible Peripheral Bus Implementations

Way back at the beginning of time, before Pentiums, before laptops, even before CDs, there was the IBM PC. Although not the first of its kind, it was the first home computer that took off, and along side it riding the new technology boom was the Apple II.

That said, the IBM PC had something unique for its day: a keyboard that wasn’t built into the case. The plug this keyboard used was typically called the AT keyboard port1, named after the IBM PC-AT family of computers. This plug was about a half an inch in diameter, round, and had 5 pins.

This wasn’t the only peripheral socket that IBM PCs had. Some had serial ports (using the RS-232 9-pin or 25-pin standards) going by the name of COM ports. Also featured on some IBM PCs was the Centronics parallel port (using a DB-25 style plug) going by the name of LPT or Printer ports.

So, now, we have three plugs on the IBM PC: one for your keyboard, one for low bandwidth devices (such as dial-up modems and mice when they came into the picture), and one for high bandwidth devices (such as printers, or Iomega Zip drives and external CD burners when those showed up). Does it end there? No.

A bit of time later, Creative Labs added a Joystick/MIDI dual function port on their SoundBlaster series of sound cards. IBM added a new pair of ports called PS/2 ports that used two small quarter-inch 6 pin plugs for the keyboard and mouse (replacing the AT keyboard and serial mouse combo). External SCSI showed up allowing SCSI drives in special external enclosures, and even some document scanners used SCSI as well.

Notice up to this point I have only written about the IBM PC. The Apple II I mentioned earlier had it’s own series of plugs that served the same exact functions. Apple II series computers had serial ports (not including the standard RS-232 serial ports which were compatible), ports for external floppy drives, ports for joysticks, ports for external hard drives. Macs shipped with the Apple Desktop Bus (ADB) for keyboards and mice, and the Apple IIGS shipped with ADB ports as well (in fact, before Macs did, although the Mac design team invented ADB).

None of the ports on the same machine were compatible with each other, and (except for external SCSI and RS-232 serial) none of the ports that served the same function that were used on IBM PCs and Apple computers were compatible with each other either. Confusing, isn’t it?

So, by the mid 1990s, there were a multitude of plugs all serving essentially the same tasks over and over, and all of them doing it incompatibly. USB was born for one specific purpose: to get rid of all these different ports and combine them into one big peripheral plug standard.

One Port To Rule Them All

In 1996, the USB Working Group brought forth USB, the best thing to happen to computer peripheral design in a long time, and within 5 years most if not all of the devices I mentioned before were using USB. You could get keyboards, mice, joysticks, printers, scanners, external media drives, external hard drives, dial-up modems, and a hundred other things with USB plugs.

Now you could build a computer with only two or three kinds of plugs and never have to worry about how to explain to your grandmother what the difference between SCSI and PS/2 is and why she can’t plug her new printer into either of them.

By 1998, all Apple Macintoshes2 were also shipping with USB, and they dropped the legacy ADB design as well. By 2000, some computers were shipping with hardly any legacy ports at all, and laptops went down to the bare minimum of two or four USB plugs with a parallel port (due to the corporate world still having tons of really old printers and that they wouldn’t replace until they stopped functioning) and sometimes PS/2 plugs if you were lucky.

The USB designers did foresee you wanting to use your old devices, however: there are USB converters for parallel port, serial port, PS/2 port, and SoundBlaster joystick devices so you never have to leave devices behind if you don’t want to. In addition, there are port converters for almost any other simple type of device out there, so USB really opened the doors for this sort of thing; the icing on the cake, of course, was when someone made converters to turn controllers from virtually any classic or current game system into USB gamepads.

350px-Usbkey_internalsUSB Fixed Problems

USB solved a very important problem: we had too many competing plug designs. Not only was it confusing for end users, it was costly. Why have six plugs of all unique designs, when you can have six plugs of all the same superior design?

USB also solved another very important problem: when you have four plugs, you will have eight or more devices to plug in. The USB standard added concentrator hubs to allow the end user to plug a bunch of devices into a single plug and have all the devices work normally.

USB, while on a roll, partially fixed a third very important problem: some devices require a small amount of power, and it’s a hassle to run yet another cable to an AC adapter (for laptops in the field, this wouldn’t even be possible). USB provides some power to devices, up to a half an amp at 5 volts. You can run almost anything on this except traditionally large devices like printers, some scanners, external media drives, and hard drive enclosures3; those require external power supplies. In addition, though this wasn’t intended when the USB Working Group designed USB, some devices recharge their batteries via USB, including a brand of AA batteries that they themselves recharge over USB.

This partial fix of the third problem is where Powered USB comes in.

Read part 2.

[1]: The IBM PC-AT was the second generation of IBM PCs. The first generation, although using the same exact plug for the keyboard, did not have compatible keyboard types.

[2]: I’d like to say thanks to Steve Jobs, for if it wern’t for Macs pushing USB, they wouldn’t have become popular on PCs; before that, they were only shipping with maybe one or two plugs plus PS/2 keyboards and mice.

[3]: This is not entirely true. There are a couple USB hard drive enclosures for 3.5″ hard drives that use 2 plugs to get 1 amp, and most 2.5″ drive enclosures run on half an amp (usually) fine. It is considered a bad hack to use the two plug method required by drive enclosures, and I suggest if your enclosure offers the use of an AC adapter, use it.

For more free software informations..but the evaluation is ur own


What is an operating system?

An operating system is a program designed to run other programs on a computer. A computer’s operating system is its most important program. It is considered the backbone of a computer, managing both software and hardware resources. Operating systems are responsible for everything from the control and allocation of memory to recognizing input from external devices and transmitting output to computer displays. They also manage files on computer hard drives and control peripherals, like printers and scanners.

The operating system of a large computer system has even more work to do. Such operating systems monitor different programs and users, making sure everything runs smoothly, without interference, despite the fact that numerous devices and programs are used simultaneously. An operating system also has a vital role to play in security. Its job includes preventing unauthorized users from accessing the computer system.

There are multiuser, multiprocessing, multitasking, multithreading, and real-time operating systems. A multiuser operating system enables multiple users to run programs simultaneously. This type of operating system may be used for just a few people or hundreds of them. In fact, there are some operating systems that are used to allow thousands of people to run programs at the same time.

A multiprocessing operating system allows a program to run on more than one central processing unit (CPU) at a time. This can come in very handy in some work environments, at schools, and even for some home-computing situations. Multitasking operating systems work a little differently; they make it possible to run more than one program at a time. Multithreading operating systems are even more different, allowing varied parts of one program to be used simultaneously.

Real-time operating systems are designed to allow computers to process and respond to input instantly. Usually, general-purpose operating systems, such as disk operating system (DOS), are not considered real time, as they may require seconds or minutes to respond to input. Real-time operating systems are typically used when computers must react to the consistent input of information without delay. For example, real-time operating systems may be used in navigation.

What is a booting? How does it works?

To boot (as a verb; also "to boot up") a computer is to load an operating system into the computer’s main memory or random access memory (RAM). Once the operating system is loaded (and, for example, on a PC, you see the initial Windows or Mac desktop screen), it’s ready for users to run applications. Sometimes you’ll see an instruction to "reboot" the operating system. This simply means to reload the operating system (the most familiar way to do this on PCs is pressing the Ctrl, Alt, and Delete keys at the same time).

On larger computers (including mainframes), the equivalent term for "boot" is "initial program load" (IPL) and for "reboot" is "re-IPL." Boot is also used as a noun for the act of booting, as in "a system boot." The term apparently derives from bootstrap which is a small strap or loop at the back of a leather boot that enables you to pull the entire boot on. There is also an expression, "pulling yourself up by your own bootstraps," meaning to leverage yourself to success from a small beginning. The booting of an operating system works by loading a very small program into the computer and then giving that program control so that it in turn loads the entire operating system.

Booting or loading an operating system is different than installing it, which is generally an initial one-time activity. (Those who buy a computer with an operating system already installed don’t have to worry about that.) When you install the operating system, you may be asked to identify certain options or configuration choices. At the end of installation, your operating system is on your hard disk ready to be booted (loaded) into random access memory, the computer storage that is closer to the microprocessor and faster to work with than the hard disk. Typically, when an operating system is installed, it is set up so that when you turn the computer on, the system is automatically booted as well. If you run out of storage (memory) or the operating system or an application program encounters an error, you may get an error message or your screen may "freeze" (you can’t do anything). In these events, you may have to reboot the operating system.

How Booting Works

Note: This procedure may differ slightly for Mac, UNIX, OS/2, or other operating systems.

When you turn on your computer, chances are that the operating system has been set up to boot (load into RAM) automatically in this sequence:

  1. As soon as the computer is turned on, the basic input-output system (BIOS) on your system’s read-only memory (ROM) chip is "woken up" and takes charge. BIOS is already loaded because it’s built-in to the ROM chip and, unlike random access memory (RAM), ROM contents don’t get erased when the computer is turned off.
  2. BIOS first does a power-on self test (POST) to make sure all the computer’s components are operational. Then the BIOS’s boot program looks for the special boot programs that will actually load the operating system onto the hard disk.
  3. First, it looks on drive A (unless you’ve set it up some other way or there is no diskette drive) at a specific place where operating system boot files are located. If there is a diskette in drive A but it’s not a system disk, BIOS will send you a message that drive A doesn’t contain a system disk. If there is no diskette in drive A (which is the most common case), BIOS looks for the system files at a specific place on your hard drive.
  4. Having identified the drive where boot files are located, BIOS next looks at the first sector (a 512-byte area) and copies information from it into specific locations in RAM. This information is known as the boot record or Master Boot Record.
  5. It then loads the boot record into a specific place (hexadecimal address 7C00) in RAM.
  6. The boot record contains a program that BIOS now branches to, giving the boot record control of the computer.
  7. The boot record loads the initial system file (for example, for DOS systems, IO.SYS) into RAM from the diskette or hard disk.
  8. The initial file (for example, IO.SYS, which includes a program called SYSINIT) then loads the rest of the operating system into RAM. (At this point, the boot record is no longer needed and can be overlaid by other data.)
  9. The initial file (for example, SYSINIT) loads a system file (for example, MSDOS.SYS) that knows how to work with the BIOS.
  10. One of the first operating system files that is loaded is a system configuration file (for DOS, it’s called CONFIG.SYS). Information in the configuration file tells the loading program which specific operating system files need to be loaded (for example, specific device driver.
  11. Another special file that is loaded is one that tells which specific applications or commands the user wants to have included or performed as part of the boot process. In DOS, this file is named AUTOEXEC.BAT. In Windows, it’s called WIN.INI.
  12. After all operating system files have been loaded, the operating system is given control of the computer and performs requested initial commands and then waits for the first interactive user input.

Key MS-DOS Terms

As with any operating system, it is important to understand the language or terms used. As mentioned, this is not a complete course in MS-DOS and there is no substitute for an MS-DOS manual. The following table presents some of the important terms and concepts you might encounter when working with MS-DOS.

Term Description
.bat An extension that indicates a batch file.
.com An extension used to identify a file as an executable program file.
.exe An extension used to identify a file as an executable program file.
Backslash (\) A symbol used to separate each directory level, for instance C:\Windows\Utilities. For this reason, it is a reserved character and cannot be used as part of a file name.
Case sensitivity The ability of the operating system to distinguish between uppercase and lowercase letters. MS-DOS commands are not case-sensitive. Traditionally, MS-DOS commands have been represented in documentation as uppercase. While you can type MS-DOS commands in either upper- or lowercase, we are representing them in this book as uppercase.
Cursor Anytime you are entering data, whether in an application or in an MS-DOS command, the cursor (usually a small flashing line) indicates the place where the next character will be inserted. It is a good idea to always know where your cursor is.
Default drive Each drive in a computer has its own letter designation. The default drive is the active drive. Unless otherwise specified, any commands act upon the default drive. The current default drive is indicated by the MS-DOS prompt. For example, if you want to see a directory (the command is DIR) of files on the A drive and the default drive is C, you need to type DIR A: otherwise you will see a directory of the C drive.
Directory Directories-known as folders in the Windows and Macintosh environments-are locations for storing files. Every disk contains a main directory known as the root directory. Below the root directory is a hierarchical structure of other (sub)directories.
MS-DOS prompt The MS-DOS prompt usually displays the active drive letter (for instance, C:) and directory. This indicates that the operating system is ready to accept the next command. (The prompt is user-changeable.)
Drive pointers MS-DOS assigns letters to each drive during the boot process.
Entering Commands You can type a command and press ENTER to execute it. If you make a mistake, correct it by using the BACKSPACE or DEL keys. Use ESC to start a command again. Use the F3 key to repeat a command.
Error messages Brief technical messages that are displayed when an error occurs.
Filenames (also filespecs) A filename is made up of three parts-a name of up to eight characters, a period, and an extension of up to three characters. The name can include any number, character, or the following symbols: _()~’!%$&#. Spaces cannot be used in MS-DOS filenames. Example: MYFILE.DOC
Greater than (>) This symbol is used to indicate that a command can be redirected to an output device. For example, to redirect the directory command to a printer, type: DIR > LPT1.
Path The address to a file. The path consists of the drive name, the location of the file in the directory structure, and the filename. Example: C:\Mystuff\Myfile.doc.
Prompt The command prompt-user interface provided by COMMAND.COM to signal to the user that the computer is ready to receive input (for example: C:\> or A:\>).
Switches Many MS-DOS commands can be used with a switch (“/” followed by a letter) to invoke special functions. Because no comprehensive manuals are available after MS-DOS 5, when you follow a command with a space and “/?”, a list of parameters and switches available for that command is displayed.
Syntax Syntax is the arrangement and interrelationship of words in phrases and sentences. In computer jargon, it is the correct format in which to type a command. In MS-DOS, every letter, number, and space has a value. The most common problem when typing MS-DOS commands is adding or leaving out a letter or character. Simple typing mistakes are the most common cause for “Bad command or filename” errors.
Wildcards The question mark (?) matches any character in a specified position, and the asterisk (*) matches any number of characters up to the end of the filename or extension. For example, to search for files beginning with the letter “A,” the command would be DIR A*.* or A?????.* (the second command would find a file that starts with the letter A and any other five characters).

MS-DOS Commands

MS-DOS commands are found in two varieties and locations. The internal MS-DOS commands are stored within the COMMAND.COM file and are always available. These provide key commands needed to access files and manage the operating system. The external MS-DOS commands are larger utilities stored as .COM or .EXE files in the MS-DOS directory. External MS-DOS commands must be on the current drive, some other drive whose location is stored in the PATH variable (that is, they can be in any directory as long the directory name and location is included in the path statement in the AUTOEXEC.BAT file), or be named with the complete path to the executable file to be run. The following table lists examples of commonly used internal MS-DOS commands.

Command Function
CHDIR or CD Changes the directory. (For example, cd\word would take you to the “word” subdirectory.)
CHKDSK Examines the FAT (file allocation table) and directory structure on a drive, checking for errors and inconsistencies that can keep you from accessing a file. It also locates lost clusters and can convert them into files for later deletion. It can also reclaim wasted space.
CLS Clears the screen.
COPY Copies files or disks. To copy all files from the “myfiles” subdirectory to the A (floppy) drive, the command would be: copy c:\myfiles\*.* a:
DATE Changes the system date.
DEL Deletes files. (Example: c:\del myfile.txt).
DIR Lists a directory of files.
DIR /P Views directories, one page at a time. (Directories can be quite long.)
DIR /W Displays wide format in columns-only the filename is listed; not size, date, or time.
DIR /W /P Displays large directories in columns, one page at a time.
DISKCOMP Compares two disks. The syntax is: a:\ diskcomp a: b: or diskcomp a: a: (the computer will prompt you to insert the second disk to be compared).
MKDIR or MD Makes a directory.
PROMPT Changes the appearance of the cursor.
REN Renames a file.
RMDIR or RD Deletes a directory. This works only if the directory is empty of all files including hidden ones.
TIME Changes the system time.
TYPE Displays (types) a text file.
VER Displays the version of MS-DOS in use.

The following table lists examples of commonly used external MS-DOS commands.

Command Function
DISKCOPY Makes a copy of a complete disk. Requires that both the source and the destination disk have the same format.
EDIT This command invokes the text editor program. This program is useful for making changes to text files such as editing CONFIG.SYS and AUTOEXEC.BAT.
FORMAT Prepares a disk for receiving files. Places a root directory on the disk.
FORMAT /S Formats a disk as a system disk.
UNDELETE Will (sometimes) recover a deleted file. Works only if the disk has not been modified since the file was deleted.
XCOPY Copies the contents of one disk to another disk. Does not require both disks to have the same format. (Note that it will not copy hidden files unless you use the /h switch.)



hacker is not the one as general people think…it what the masters think.
What Is a Hacker?
The Jargon File contains a bunch of definitions of the term ‘hacker’, most having to do with technical adeptness and a delight in solving problems and overcoming limits. If you want to know how to become a hacker, though, only two are really relevant.
There is a community, a shared culture, of expert programmers and networking wizards that traces its history back through decades to the first time-sharing minicomputers and the earliest ARPAnet experiments. The members of this culture originated the term ‘hacker’. Hackers built the Internet. Hackers made the Unix operating system what it is today. Hackers run Usenet. Hackers make the World Wide Web work. If you are part of this culture, if you have contributed to it and other people in it know who you are and call you a hacker, you’re a hacker.
The hacker mind-set is not confined to this software-hacker culture. There are people who apply the hacker attitude to other things, like electronics or music — actually, you can find it at the highest levels of any science or art. Software hackers recognize these kindred spirits elsewhere and may call them ‘hackers’ too — and some claim that the hacker nature is really independent of the particular medium the hacker works in. But in the rest of this document we will focus on the skills and attitudes of software hackers, and the traditions of the shared culture that originated the term ‘hacker’.
There is another group of people who loudly call themselves hackers, but aren’t. These are people (mainly adolescent males) who get a kick out of breaking into computers and phreaking the phone system. Real hackers call these people ‘crackers’ and want nothing to do with them. Real hackers mostly think crackers are lazy, irresponsible, and not very bright, and object that being able to break security doesn’t make you a hacker any more than being able to hotwire cars makes you an automotive engineer. Unfortunately, many journalists and writers have been fooled into using the word ‘hacker’ to describe crackers; this irritates real hackers no end.
The basic difference is this: hackers build things, crackers break them.
If you want to be a hacker, keep reading. If you want to be a cracker, go read the alt.2600 newsgroup and get ready to do five to ten in the slammer after finding out you aren’t as smart as you think you are. And that’s all I’m going to say about crackers.

The Hacker Attitude
1. The world is full of fascinating problems waiting to be solved.
2. No problem should ever have to be solved twice.
3. Boredom and drudgery are evil.
4. Freedom is good.
5. Attitude is no substitute for competence.
Hackers solve problems and build things, and they believe in freedom and voluntary mutual help. To be accepted as a hacker, you have to behave as though you have this kind of attitude yourself. And to behave as though you have the attitude, you have to really believe the attitude.
But if you think of cultivating hacker attitudes as just a way to gain acceptance in the culture, you’ll miss the point. Becoming the kind of person who believes these things is important for you — for helping you learn and keeping you motivated. As with all creative arts, the most effective way to become a master is to imitate the mind-set of masters — not just intellectually but emotionally as well.
Or, as the following modern Zen poem has it:
To follow the path:
look to the master,
follow the master,
walk with the master,
see through the master,
become the master.
So, if you want to be a hacker, repeat the following things until you believe them:
1. The world is full of fascinating problems waiting to be solved.
Being a hacker is lots of fun, but it’s a kind of fun that takes lots of effort. The effort takes motivation. Successful athletes get their motivation from a kind of physical delight in making their bodies perform, in pushing themselves past their own physical limits. Similarly, to be a hacker you have to get a basic thrill from solving problems, sharpening your skills, and exercising your intelligence.
If you aren’t the kind of person that feels this way naturally, you’ll need to become one in order to make it as a hacker. Otherwise you’ll find your hacking energy is sapped by distractions like sex, money, and social approval.
(You also have to develop a kind of faith in your own learning capacity — a belief that even though you may not know all of what you need to solve a problem, if you tackle just a piece of it and learn from that, you’ll learn enough to solve the next piece — and so on, until you’re done.)
2. No problem should ever have to be solved twice.
Creative brains are a valuable, limited resource. They shouldn’t be wasted on re-inventing the wheel when there are so many fascinating new problems waiting out there.
To behave like a hacker, you have to believe that the thinking time of other hackers is precious — so much so that it’s almost a moral duty for you to share information, solve problems and then give the solutions away just so other hackers can solve new problems instead of having to perpetually re-address old ones.
Note, however, that “No problem should ever have to be solved twice.” does not imply that you have to consider all existing solutions sacred, or that there is only one right solution to any given problem. Often, we learn a lot about the problem that we didn’t know before by studying the first cut at a solution. It’s OK, and often necessary, to decide that we can do better. What’s not OK is artificial technical, legal, or institutional barriers (like closed-source code) that prevent a good solution from being re-used and force people to re-invent wheels.
(You don’t have to believe that you’re obligated to give all your creative product away, though the hackers that do are the ones that get most respect from other hackers. It’s consistent with hacker values to sell enough of it to keep you in food and rent and computers. It’s fine to use your hacking skills to support a family or even get rich, as long as you don’t forget your loyalty to your art and your fellow hackers while doing it.)
3. Boredom and drudgery are evil.
Hackers (and creative people in general) should never be bored or have to drudge at stupid repetitive work, because when this happens it means they aren’t doing what only they can do — solve new problems. This wastefulness hurts everybody. Therefore boredom and drudgery are not just unpleasant but actually evil.
To behave like a hacker, you have to believe this enough to want to automate away the boring bits as much as possible, not just for yourself but for everybody else (especially other hackers).
(There is one apparent exception to this. Hackers will sometimes do things that may seem repetitive or boring to an observer as a mind-clearing exercise, or in order to acquire a skill or have some particular kind of experience you can’t have otherwise. But this is by choice — nobody who can think should ever be forced into a situation that bores them.)
4. Freedom is good.
Hackers are naturally anti-authoritarian. Anyone who can give you orders can stop you from solving whatever problem you’re being fascinated by — and, given the way authoritarian minds work, will generally find some appallingly stupid reason to do so. So the authoritarian attitude has to be fought wherever you find it, lest it smother you and other hackers.
(This isn’t the same as fighting all authority. Children need to be guided and criminals restrained. A hacker may agree to accept some kinds of authority in order to get something he wants more than the time he spends following orders. But that’s a limited, conscious bargain; the kind of personal surrender authoritarians want is not on offer.)
Authoritarians thrive on censorship and secrecy. And they distrust voluntary cooperation and information-sharing — they only like ‘cooperation’ that they control. So to behave like a hacker, you have to develop an instinctive hostility to censorship, secrecy, and the use of force or deception to compel responsible adults. And you have to be willing to act on that belief.
5. Attitude is no substitute for competence.
To be a hacker, you have to develop some of these attitudes. But copping an attitude alone won’t make you a hacker, any more than it will make you a champion athlete or a rock star. Becoming a hacker will take intelligence, practice, dedication, and hard work.
Therefore, you have to learn to distrust attitude and respect competence of every kind. Hackers won’t let posers waste their time, but they worship competence — especially competence at hacking, but competence at anything is valued. Competence at demanding skills that few can master is especially good, and competence at demanding skills that involve mental acuteness, craft, and concentration is best.
If you revere competence, you’ll enjoy developing it in yourself — the hard work and dedication will become a kind of intense play rather than drudgery. That attitude is vital to becoming a hacker.
Basic Hacking Skills
1. Learn how to program.
2. Get one of the open-source Unixes and learn to use and run it.
3. Learn how to use the World Wide Web and write HTML.
4. If you don’t have functional English, learn it.
The hacker attitude is vital, but skills are even more vital. Attitude is no substitute for competence, and there’s a certain basic toolkit of skills which you have to have before any hacker will dream of calling you one.
This toolkit changes slowly over time as technology creates new skills and makes old ones obsolete. For example, it used to include programming in machine language, and didn’t until recently involve HTML. But right now it pretty clearly includes the following:
1. Learn how to program.
This, of course, is the fundamental hacking skill. If you don’t know any computer languages, I recommend starting with Python. It is cleanly designed, well documented, and relatively kind to beginners. Despite being a good first language, it is not just a toy; it is very powerful and flexible and well suited for large projects. I have written a more detailed evaluation of Python. Good tutorials are available at the Python web site.
I used to recommend Java as a good language to learn early, but this critique has changed my mind (search for “The Pitfalls of Java as a First Programming Language” within it). A hacker cannot, as they devastatingly put it “approach problem-solving like a plumber in a hardware store”; you have to know what the components actually do. Now I think it is probably best to learn C and Lisp first, then Java.
There is perhaps a more general point here. If a language does too much for you, it may be simultaneously a good tool for production and a bad one for learning. It’s not only languages that have this problem; web application frameworks like RubyOnRails, CakePHP, Django may make it too easy to reach a superficial sort of understanding that will leave you without resources when you have to tackle a hard problem, or even just debug the solution to an easy one.
If you get into serious programming, you will have to learn C, the core language of Unix. C++ is very closely related to C; if you know one, learning the other will not be difficult. Neither language is a good one to try learning as your first, however. And, actually, the more you can avoid programming in C the more productive you will be.
C is very efficient, and very sparing of your machine’s resources. Unfortunately, C gets that efficiency by requiring you to do a lot of low-level management of resources (like memory) by hand. All that low-level code is complex and bug-prone, and will soak up huge amounts of your time on debugging. With today’s machines as powerful as they are, this is usually a bad tradeoff — it’s smarter to use a language that uses the machine’s time less efficiently, but your time much more efficiently. Thus, Python.
Other languages of particular importance to hackers include Perl and LISP. Perl is worth learning for practical reasons; it’s very widely used for active web pages and system administration, so that even if you never write Perl you should learn to read it. Many people use Perl in the way I suggest you should use Python, to avoid C programming on jobs that don’t require C’s machine efficiency. You will need to be able to understand their code.
LISP is worth learning for a different reason — the profound enlightenment experience you will have when you finally get it. That experience will make you a better programmer for the rest of your days, even if you never actually use LISP itself a lot. (You can get some beginning experience with LISP fairly easily by writing and modifying editing modes for the Emacs text editor, or Script-Fu plugins for the GIMP.)
It’s best, actually, to learn all five of Python, C/C++, Java, Perl, and LISP. Besides being the most important hacking languages, they represent very different approaches to programming, and each will educate you in valuable ways.
But be aware that you won’t reach the skill level of a hacker or even merely a programmer simply by accumulating languages — you need to learn how to think about programming problems in a general way, independent of any one language. To be a real hacker, you need to get to the point where you can learn a new language in days by relating what’s in the manual to what you already know. This means you should learn several very different languages.
I can’t give complete instructions on how to learn to program here — it’s a complex skill. But I can tell you that books and courses won’t do it — many, maybe most of the best hackers are self-taught. You can learn language features — bits of knowledge — from books, but the mind-set that makes that knowledge into living skill can be learned only by practice and apprenticeship. What will do it is (a) reading code and (b) writing code.
Peter Norvig, who is one of Google’s top hackers and the co-author of the most widely used textbook on AI, has written an excellent essay called Teach Yourself Programming in Ten Years. His “recipe for programming success” is worth careful attention.
Learning to program is like learning to write good natural language. The best way to do it is to read some stuff written by masters of the form, write some things yourself, read a lot more, write a little more, read a lot more, write some more … and repeat until your writing begins to develop the kind of strength and economy you see in your models.
Finding good code to read used to be hard, because there were few large programs available in source for fledgeling hackers to read and tinker with. This has changed dramatically; open-source software, programming tools, and operating systems (all built by hackers) are now widely available. Which brings me neatly to our next topic…
2. Get one of the open-source Unixes and learn to use and run it.
I’ll assume you have a personal computer or can get access to one. (Take a moment to appreciate how much that means. The hacker culture originally evolved back when computers were so expensive that individuals could not own them.) The single most important step any newbie can take toward acquiring hacker skills is to get a copy of Linux or one of the BSD-Unixes or OpenSolaris, install it on a personal machine, and run it.
Yes, there are other operating systems in the world besides Unix. But they’re distributed in binary — you can’t read the code, and you can’t modify it. Trying to learn to hack on a Microsoft Windows machine or under any other closed-source system is like trying to learn to dance while wearing a body cast.
Under Mac OS X it’s possible, but only part of the system is open source — you’re likely to hit a lot of walls, and you have to be careful not to develop the bad habit of depending on Apple’s proprietary code. If you concentrate on the Unix under the hood you can learn some useful things.
Unix is the operating system of the Internet. While you can learn to use the Internet without knowing Unix, you can’t be an Internet hacker without understanding Unix. For this reason, the hacker culture today is pretty strongly Unix-centered. (This wasn’t always true, and some old-time hackers still aren’t happy about it, but the symbiosis between Unix and the Internet has become strong enough that even Microsoft’s muscle doesn’t seem able to seriously dent it.)
So, bring up a Unix — I like Linux myself but there are other ways (and yes, you can run both Linux and Microsoft Windows on the same machine). Learn it. Run it. Tinker with it. Talk to the Internet with it. Read the code. Modify the code. You’ll get better programming tools (including C, LISP, Python, and Perl) than any Microsoft operating system can dream of hosting, you’ll have fun, and you’ll soak up more knowledge than you realize you’re learning until you look back on it as a master hacker.
For more about learning Unix, see The Loginataka. You might also want to have a look at The Art Of Unix Programming.
To get your hands on a Linux, see the Linux Online! site; you can download from there or (better idea) find a local Linux user group to help you with installation.
During the first ten years of this HOWTO’s life, I reported that from a new user’s point of view, all Linux distributions are almost equivalent. But in 2006-2007, an actual best choice emerged: Ubuntu. While other distros have their own areas of strength, Ubuntu is far and away the most accessible to Linux newbies.
You can find BSD Unix help and resources at http://www.bsd.org.
A good way to dip your toes in the water is to boot up what Linux fans call a live CD, a distribution that runs entirely off a CD without having to modify your hard disk. This will be slow, because CDs are slow, but it’s a way to get a look at the possibilities without having to do anything drastic.
I have written a primer on the basics of Unix and the Internet.
I used to recommend against installing either Linux or BSD as a solo project if you’re a newbie. Nowadays the installers have gotten good enough that doing it entirely on your own is possible, even for a newbie. Nevertheless, I still recommend making contact with your local Linux user’s group and asking for help. It can’t hurt, and may smooth the process.
3. Learn how to use the World Wide Web and write HTML.
Most of the things the hacker culture has built do their work out of sight, helping run factories and offices and universities without any obvious impact on how non-hackers live. The Web is the one big exception, the huge shiny hacker toy that even politicians admit has changed the world. For this reason alone (and a lot of other good ones as well) you need to learn how to work the Web.
This doesn’t just mean learning how to drive a browser (anyone can do that), but learning how to write HTML, the Web’s markup language. If you don’t know how to program, writing HTML will teach you some mental habits that will help you learn. So build a home page. Try to stick to XHTML, which is a cleaner language than classic HTML. (There are good beginner tutorials on the Web; here’s one.)
But just having a home page isn’t anywhere near good enough to make you a hacker. The Web is full of home pages. Most of them are pointless, zero-content sludge — very snazzy-looking sludge, mind you, but sludge all the same (for more on this see The HTML Hell Page).
To be worthwhile, your page must have content — it must be interesting and/or useful to other hackers. And that brings us to the next topic…
4. If you don’t have functional English, learn it.
As an American and native English-speaker myself, I have previously been reluctant to suggest this, lest it be taken as a sort of cultural imperialism. But several native speakers of other languages have urged me to point out that English is the working language of the hacker culture and the Internet, and that you will need to know it to function in the hacker community.
Back around 1991 I learned that many hackers who have English as a second language use it in technical discussions even when they share a birth tongue; it was reported to me at the time that English has a richer technical vocabulary than any other language and is therefore simply a better tool for the job. For similar reasons, translations of technical books written in English are often unsatisfactory (when they get done at all).
Linus Torvalds, a Finn, comments his code in English (it apparently never occurred to him to do otherwise). His fluency in English has been an important factor in his ability to recruit a worldwide community of developers for Linux. It’s an example worth following.
Being a native English-speaker does not guarantee that you have language skills good enough to function as a hacker. If your writing is semi-literate, ungrammatical, and riddled with misspellings, many hackers (including myself) will tend to ignore you. While sloppy writing does not invariably mean sloppy thinking, we’ve generally found the correlation to be strong — and we have no use for sloppy thinkers. If you can’t yet write competently, learn to.
Status in the Hacker Culture
1. Write open-source software
2. Help test and debug open-source software
3. Publish useful information
4. Help keep the infrastructure working
5. Serve the hacker culture itself
Like most cultures without a money economy, hackerdom runs on reputation. You’re trying to solve interesting problems, but how interesting they are, and whether your solutions are really good, is something that only your technical peers or superiors are normally equipped to judge.
Accordingly, when you play the hacker game, you learn to keep score primarily by what other hackers think of your skill (this is why you aren’t really a hacker until other hackers consistently call you one). This fact is obscured by the image of hacking as solitary work; also by a hacker-cultural taboo (gradually decaying since the late 1990s but still potent) against admitting that ego or external validation are involved in one’s motivation at all.
Specifically, hackerdom is what anthropologists call a gift culture. You gain status and reputation in it not by dominating other people, nor by being beautiful, nor by having things other people want, but rather by giving things away. Specifically, by giving away your time, your creativity, and the results of your skill.
There are basically five kinds of things you can do to be respected by hackers:
1. Write open-source software
The first (the most central and most traditional) is to write programs that other hackers think are fun or useful, and give the program sources away to the whole hacker culture to use.
(We used to call these works “free software”, but this confused too many people who weren’t sure exactly what “free” was supposed to mean. Most of us now prefer the term “open-source” software).
Hackerdom’s most revered demigods are people who have written large, capable programs that met a widespread need and given them away, so that now everyone uses them.
But there’s a bit of a fine historical point here. While hackers have always looked up to the open-source developers among them as our community’s hardest core, before the mid-1990s most hackers most of the time worked on closed source. This was still true when I wrote the first version of this HOWTO in 1996; it took the mainstreaming of open-source software after 1997 to change things. Today, “the hacker community” and “open-source developers” are two descriptions for what is essentially the same culture and population — but it is worth remembering that this was not always so. (For more on this, see the section called “Historical Note: Hacking, Open Source, and Free Software”.)
2. Help test and debug open-source software
They also serve who stand and debug open-source software. In this imperfect world, we will inevitably spend most of our software development time in the debugging phase. That’s why any open-source author who’s thinking will tell you that good beta-testers (who know how to describe symptoms clearly, localize problems well, can tolerate bugs in a quickie release, and are willing to apply a few simple diagnostic routines) are worth their weight in rubies. Even one of these can make the difference between a debugging phase that’s a protracted, exhausting nightmare and one that’s merely a salutary nuisance.
If you’re a newbie, try to find a program under development that you’re interested in and be a good beta-tester. There’s a natural progression from helping test programs to helping debug them to helping modify them. You’ll learn a lot this way, and generate good karma with people who will help you later on.
3. Publish useful information
Another good thing is to collect and filter useful and interesting information into web pages or documents like Frequently Asked Questions (FAQ) lists, and make those generally available.
Maintainers of major technical FAQs get almost as much respect as open-source authors.
4. Help keep the infrastructure working
The hacker culture (and the engineering development of the Internet, for that matter) is run by volunteers. There’s a lot of necessary but unglamorous work that needs done to keep it going — administering mailing lists, moderating newsgroups, maintaining large software archive sites, developing RFCs and other technical standards.
People who do this sort of thing well get a lot of respect, because everybody knows these jobs are huge time sinks and not as much fun as playing with code. Doing them shows dedication.
5. Serve the hacker culture itself
Finally, you can serve and propagate the culture itself (by, for example, writing an accurate primer on how to become a hacker :-)). This is not something you’ll be positioned to do until you’ve been around for while and become well-known for one of the first four things.
The hacker culture doesn’t have leaders, exactly, but it does have culture heroes and tribal elders and historians and spokespeople. When you’ve been in the trenches long enough, you may grow into one of these. Beware: hackers distrust blatant ego in their tribal elders, so visibly reaching for this kind of fame is dangerous. Rather than striving for it, you have to sort of position yourself so it drops in your lap, and then be modest and gracious about your status.
Source: www.catb.org (All right reserved to www.catb.org)

Advantages & Disadvantages of C Programming

What are the advantages and disadvantages of pointer in C language?

The main advantages of using pointers are
1.) Function cannot return more than one value. But when the same function can modify many pointer variables and function as if it is returning more than one variable.
2.) In the case of arrays, we can decide the size of th array at runtime by allocating the necessary space.
3.) In the case of pointers to classes, we can use polymorphism and virtual classes to change the behavior of pointers to various types of classes at runtime

Coming to the disadvantages of pointers
1.) If sufficient memory is not available during runtime for the storage of pointers, the program may crash (least possible)
2.) If the programmer is not careful and consistent with the use of pointers, the program may crash (very possible)

A brief synopsis on the "rules" of pointers
1.) Always initialize a pointer by calling an allocator
2.) Alway check to see if the allocation request failed
3.) Always deallocate memory controlled by a pointer when done with it
4.) Never access memory that has not been allocated – pay attention to the size of arrays
5.) Never access memory that has been deallocated
6.) Do not allocate and deallocate memory with wild abandon, because that can fragment the virtual memory address space, causing future allocation requests to fail – particularly in long running programs such as web servers

There are more advantages and disadvantages than these – these are but a few examples.

How The Internet Works, How Does the Internet Work (A Book that contains almost everything about internet)


How The Internet Works

RESOLUTION: The Federal Networking Council (FNC) agrees that the following language reflects our definition of the term ‘Internet’. ‘Internet’ refers to the global information system that —

(i)  is logically linked together by a globally unique address space based on the Internet Protocol (IP) or its subsequent extensions/follow-ons;
(ii)  is able to support communications using the Transmission Control Protocol/Internet Protocol (TCP/IP) suite or its subsequent extensions/follow-ons, and/or other IP-compatible protocols; and
(iii)  provides, uses or makes accessible, either publicly or privately, high level services layered on the communications and related infrastructure described herein.

Unanimous resolution, Federal Networking Council, October 24, 1995.

How does the Internet work? Each of the Internet application chapters include a section on how it works. This section describes how the underlying Internet itself works.

The Internet workings include a technical design and a management structure. The management structure consists of a generally democratic collection of loosely-coupled organizations and working groups with mostly non-overlapping responsibilities. The technical design is founded on a complex, interlocking set of hierarchical tree-like structures, like Internet Protocol addresses and domain names, mixed with networked structures like packet switching and routing protocols, all tied together with millions of lines of sophisticated software that continues to get better all the time.

So far this combination of management and technical structures has worked well, providing the reliable, powerful communication platform on which the rest of the complexity of the Internet is built. The following sections provide more information.


This book can be found on the internet at http://www.livinginternet.com/i/iw.htm and I have posted from the given site. So, all the contents of this post has a copyright to http://www.livinginternet.com/i/iw.htm.

History of C Programming Language


C Programming Language History

Dennis Ritchie, Developer / Inventor of C Programing Language, Unix
Dennis Ritchie

What is or is not implemented in the kernel represents both a great responsibility and a great power. It is a soap-box platform on ‘the way things should be done.’ Even so, if ‘the way’ is too radical, no one will follow it. Every important decision was weighed carefully. Throughout, simplicity has been substituted for efficiency. Complex algorithms are used only if their complexity can be localized.

Ken Thompson; UNIX Implementation; The Bell System Technical Journal; July – August 1978.

The development of Unix in the C language made it uniquely portable and improvable.

The first version of Unix was written in the low-level PDP-7 assembler language. Soon after, a language called TMG was created for the PDP-7 by R. M. McClure. Using TMG to develop a FORTRAN compiler, Ken Thompson instead ended up developing a compiler for a new high-level language he called B, based on the earlier BCPL language developed by Martin Richard. Where it might take several pages of detailed PDP-7 assembly code to accomplish a given task, the same functionality could typically be expressed in a higher level language like B in just a few lines. B was thereafter used for further development of the Unix system, which made the work much faster and more convenient.

When the PDP-11 computer arrived at Bell Labs, Dennis Ritchie built on B to create a new language called C which inherited Thompson’s taste for concise syntax, and had a powerful mix of high-level functionality and the detailed features required to program an operating system. Most of the components of Unix were eventually rewritten in C, culminating with the kernel itself in 1973. Because of its convenience and power, C went on to become the most popular programming language in the world over the next quarter century.

This development of Unix in C had two important consequences:

  • Portability. It made it much easier to port Unix to newly developed computers, because it eliminated the need to translate the entire operating system to the new assemble language by hand:
    • First, write a C-to-assembly language compiler for the new machine.
    • Then use the new compiler to automatically translate the Unix C language source code into the new machine’s assembly language.
    • Finally, write only a small amount of new code where absolutely required by hardware differences with the new machine.
  • Improvability. It made Unix easy to customize and improve by any programmer that could learn the high-level C programming language. Many did learn C, and went on to experiment with modifications to the operating system, producing many useful new extensions and enhancements.

History of C Programming Language

Source: http://www.livinginternet.com/i/iw_unix_c.htm Please visit for more information


Note: If you are learning ICT (Information & Communication Technology) or you have some information related to IT or ICT please feel free to send to arlsuraj@gmail.com to post your articles here. Thanks

Suraj (Admin)

The Free Software Definition – GNU Project – Free Software Foundation (FSF)


We maintain this free software definition to show clearly what must be true about a particular software program for it to be considered free software. From time to time we revise this definition to clarify it.If you would like to review the changes we’ve made, please seethe History section below for more information.

“Free software” is a matter of liberty, not price. To understand the concept, you should think of “free” as in “free speech,”not as in “free beer.”

Free software is a matter of the users’ freedom to run, copy, distribute, study, change and improve the software. More precisely, it means that the program’s users have the four essential freedoms:

  • The freedom to run the program, for any purpose (freedom 0).
  • The freedom to study how the program works, and change it to make it do what you wish (freedom 1). Access to the source code is a precondition for this.
  • The freedom to redistribute copies so you can help your neighbor (freedom 2).
  • The freedom to distribute copies of your modified versions to others (freedom 3). By doing this you can give the whole community a chance to benefit from your changes. Access to the source code is a precondition for this.

A program is free software if users have all of these freedoms. Thus,you should be free to redistribute copies, either with or without modifications, either gratis or charging a fee for distribution, to anyone anywhere. Being free to do these things means (among other things) that you do not have to ask or pay for permission to do so.

You should also have the freedom to make modifications and use them privately in your own work or play, without even mentioning that they exist. If you do publish your changes, you should not be required to notify anyone in particular, or in any particular way.

The freedom to run the program means the freedom for any kind of person or organization to use it on any kind of computer system, for any kind of overall job and purpose, without being required to communicate about it with the developer or any other specific entity. In this freedom, it is the user’s purpose that matters, not the developer’s purpose; you as a user are free to run the program for your purposes,and if you distribute it to someone else, she is then free to run it for her purposes, but you are not entitled to impose your purposes on her.

The freedom to redistribute copies must include binary or executable forms of the program, as well as source code, for both modified and unmodified versions. (Distributing programs in runnable form is necessary for conveniently installable free operating systems.) It is OK if there is no way to produce a binary or executable form for a certain program(since some languages don’t support that feature), but you must have the freedom to redistribute such forms should you find or develop a way to make them.

In order for freedoms 1 and 3 (the freedom to make changes and the freedom to publish improved versions) to be meaningful, you must have access to the source code of the program. Therefore, accessibility of source code is a necessary condition for free software. Obfuscated“source code” is not real source code and does not count as source code.

Freedom 1 includes the freedom to use your changed version in place of the original. If the program is delivered in a product designed to run someone else’s modified versions but refuse to run yours —a practice known as “tivoization” or (in its practitioners’ perverse terminology) as “secure boot” — freedom 1 becomes a theoretical fiction rather than a practical freedom. This is not sufficient. In other words, these binaries are not free software even if the source code they are compiled from is free.

One important way to modify a program is by merging in available free subroutines and modules. If the program’s license says that you cannot merge in a suitably licensed existing module — for instance, if it requires you to be the copyright holder of any code you add — then the license is too restrictive to qualify as free.

Freedom 3 includes the freedom to release your modified versions as free software. A free license may also permit other ways of releasing them; in other words, it does not have to be a copy left license. However, license that requires modified versions to be no free does not qualify as a free license.

In order for these freedoms to be real, they must be permanent and irrevocable as long as you do nothing wrong; if the developer of the software has the power to revoke the license, or retroactively change its terms, without your doing anything wrong to give cause, the software is not free.

However, certain kinds of rules about the manner of distributing free software are acceptable, when they don’t conflict with the central freedoms. For example, copy left (very simply stated) is the rule that when redistributing the program, you cannot add restrictions to deny other people the central freedoms. This rule does not conflict with the central freedoms; rather it protects them.

“Free software” does not mean “noncommercial.” A free program must be available for commercial use, commercial development,and commercial distribution. Commercial development of free software is no longer unusual; such free commercial software is very important.You may have paid money to get copies of free software, or you may have obtained copies at no charge. But regardless of how you got your copies,you always have the freedom to copy and change the software, even to sell copies.

Whether a change constitutes an improvement is a subjective matter.If your modifications are limited, in substance, to changes that someone else considers an improvement, that is not freedom.

However, rules about how to package a modified version are acceptable,if they don’t substantively limit your freedom to release modified versions, or your freedom to make and use modified versions privately.Thus, it is acceptable for the license to require that you change the name of the modified version, remove a logo, or identify your modifications as yours. As long as these requirements are not so burdensome that they effectively hamper you from releasing your changes, they are acceptable; you’re already making other changes to the program, so you won’t have trouble making a few more.

Rules that “if you make your version available in this way, you must make it available in that way also” can be acceptable too,on the same condition. An example of such an acceptable rule is one saying that if you have distributed a modified version and a previous developer asks for a copy of it, you must send one. (Note that such a rule still leaves you the choice of whether to distribute your version at all.) Rules that require release of source code to the users for versions that you put into public use are also acceptable.

In the GNU project, we use copy left to protect these freedoms legally for everyone. But noncopylefted free software also exists. We believe there are important reasons why it is better to use copy left,but if your program is non copy lifted free software, it is still basically ethical. (See Categories of Free Software for a description of how “free software,” “copylefted software” and other categories of software relate to each other.)

Sometimes government export control regulations and trade sanctions can constrain your freedom to distribute copies of programs internationally. Software developers do not have the power to eliminate or override these restrictions, but what they can and must do is refuse to impose them as conditions of use of the program. In this way, the restrictions will not affect activities and people outside the jurisdictions of these governments. Thus, free software licenses must not require obedience to any export regulations as a condition of any of the essential freedoms.

Most free software licenses are based on copyright, and there are limits on what kinds of requirements can be imposed through copyright. If a copyright-based license respects freedom in the ways described above, it is unlikely to have some other sort of problem that we never anticipated(though this does happen occasionally). However, some free software licenses are based on contracts, and contracts can impose a much larger range of possible restrictions. That means there are many possible ways such a license could be unacceptably restrictive and non free.

We can’t possibly list all the ways that might happen. If a contract-based license restricts the user in an unusual way that copyright-based licenses cannot, and which isn’t mentioned here as legitimate, we will have to think about it, and we will probably conclude it is non free.

When talking about free software, it is best to avoid using terms like “give away” or “for free,” because those terms imply that the issue is about price, not freedom. Some common terms such as “piracy” embody opinions we hope you won’t endorse. See Confusing Words and Phrases that are Worth Avoiding for a discussion of these terms. We also have a list of proper translations of “free software” into various languages.

Finally, note that criteria such as those stated in this free software definition require careful thought for their interpretation. To decide whether a specific software license qualifies as a free software license,we judge it based on these criteria to determine whether it fits their spirit as well as the precise words. If a license includes unconscionable restrictions, we reject it, even if we did not anticipate the issue in these criteria. Sometimes a license requirement raises an issue that calls for extensive thought, including discussions with a lawyer,before we can decide if the requirement is acceptable. When we reach conclusion about a new issue, we often update these criteria to make it easier to see why certain licenses do or don’t qualify.

If you are interested in whether a specific license qualifies as a free software license, see our list of licenses. If the license you are concerned with is not listed there, you can ask us about it by sending us email at <licensing@gnu.org>.

If you are contemplating writing a new license, please contact the Free Software Foundation first by writing to that address. The proliferation of different free software licenses means increased work for users in understanding the licenses; we may be able to help you find an existing free software license that meets your needs.

If that isn’t possible, if you really need a new license, with our help you can ensure that the license really is a free software license and avoid various practical problems.

Beyond Software

Software manuals must be free,for the same reasons that software must be free, and because the manuals are in effect part of the software.

The same arguments also make sense for other kinds of works of practical use — that is to say, works that embody useful knowledge,such as educational works and reference works. Wikipedia is the best-known example.

Any kind of work can be free, and the definition of free software has been extended to a definition of free cultural works applicable to any kind of works.

Open Source?

Another group has started using the term “open source” to mean something close (but not identical) to “free software.” We prefer the term “free software” because, once you have heard that it refers to freedom rather than price, it calls to mind freedom. The word “open” never refers to freedom.


From time to time we revise this Free Software Definition to clarify it. Here we provide a list of those modifications, along with links to illustrate exactly what changed, so that others can review them if they like.

  • Version 1.92: Clarify that obfuscated code does not qualify as source code.
  • Version 1.90: Clarify that freedom 3 means the right to distribute copies of your own modified or improved version, not a right to participate in someone else’s development project.
  • Version 1.89: Freedom 3 includes the right to release modified versions as free software.
  • Version 1.80: Freedom 1 must be practical, not just theoretical;i.e., no tivoization.
  • Version 1.77: Clarify that all retroactive changes to the license are unacceptable, even if it’s not described as a complete replacement.
  • Version 1.74: Four clarifications of points not explicit enough, or stated in some places but not reflected everywhere:
    • “Improvements” does not mean the license can substantively limit what kinds of modified versions you can release.Freedom 3 includes distributing modified versions, not just changes.
    • The right to merge in existing modules refers to those that are suitably licensed.
    • Explicitly state the conclusion of the point about export controls.
    • Imposing a license change constitutes revoking the old license.
  • Version 1.57: Add “Beyond Software” section.
  • Version 1.46: Clarify whose purpose is significant in the freedom to runt he program for any purpose.
  • Version 1.41: Clarify wording about contract-based licenses.
  • Version 1.40: Explain that a free license must allow to you use other available free software to create your modifications.
  • Version 1.39: Note that it is acceptable for a license to require you to provide source for versions of the software you put into public use.
  • Version 1.31: Note that it is acceptable for a license to require you to identify yourself as the author of modifications. Other minor clarifications throughout the text.
  • Version 1.23: Address potential problems related to contract-based licenses.
  • Version 1.16: Explain why distribution of binaries is important.
  • Version 1.11: Note that a free license may require you to send a copy of versions you distribute to the author.

There are gaps in the version numbers because there are many other changes that do not affect the substance of the definition at all.Instead, they fix links, add translations, and so on. If you would like to review the complete list of changes, you can do so on our cvs web interface.

The Free Software Foundation is the principal organizational sponsor of the GNU Operating System. Our mission is to preserve, protect and promote the freedom to use, study,copy, modify, and redistribute computer software, and to defend the rights of Free Software users.

Support GNU and the FSF by buying manuals and gear, joining the FSF as an associate member or by making a donation.

back to top

The Free Software Definition – GNU Project – Free Software Foundation (FSF)

%d bloggers like this: