Forking is a common practice in software development, where programmers take an existing piece of software and change it to its own form, often creating a completely new product or application. Forking occurs in many different forms, including the use of a software "fork", a program that's written using a different programming language. In software development, a fork occurs when programmers take an existing piece of software and start entirely separate independent development for it, creating entirely separate and unique piece of software from scratch. This can be very useful, but in some cases the changes to the original code may have disastrous consequences.
One example of a Mac application that has experienced such a drastic change is the Apple iWork Pages software. Before this fork, Apple's software applications were designed in C++ and had limited customization options. As the number of Mac users grew, however, many programmers wanted to move their programs to a more user-friendly programming language such as Objective C. Apple, however, didn't allow this at the time, since they wanted to maintain complete control over the iWork Pages applications. The result was the creation of the fork, which allowed programmers to create applications in Objective C that had all of the customization capabilities of C++ programs, without losing control over the software.
Because of Apple's policy, however, there are actually many applications in the market today that use Objective C as a source, allowing programmers to use C++ as a tool and produce forkable software for Mac. With the use of this fork, programmers can create a completely different piece of software than what had been previously available, giving Mac users the ability to use a specific program with a new interface and/or features that weren't available in the first version. Since Apple's policy makes the decision about whether or not a fork will be permitted difficult, many developers create their programs in C++, and then fork their program into Objective C as soon as they are done. This allows them to create a fully functioning, stand-alone application that still has all of the same features as the original program, while still maintaining all of the original program's customization capabilities.