A compiler is usually a program that converts the source code versions of other programs into assembly language or machine language, which can be read directly by a processor. Some compilers, however, are designed to convert source code written in one programming language into the equivalent written in another programming language. Source code is the original version of software as it is written by a human in plain text using a programming language. Free software is software whose license makes it available to everyone at no monetary cost and allows everyone to use it for any desired purpose, including installing on as many computers as desired, studying, modifying, extending and redistributing in its original or modified form. Among the best known examples are the Linux operating system and the Firefox web browser. The GCC contains a separate program for each of the programming languages for which it can be used. All share a common internal structure that consists of a language-specific front end, which parses the programs and generates an abstract syntax tree, and a back end, which converts the tree to GCC’s Register Transfer Language, performs various optimizations of it and then generates the final assembly language. The assembly language is produced using architecture-specific pattern matching techniques based on an algorithm.