Программист пишет программу на языке понятном человеку. Этот язык сильно структурирован, жёстко подчинён законам логики, насыщен формальностями, но всё-таки человек может его освоить и давать компьютеру директивы на нём. Такой язык программирования называется языком высокого уровня. Примеры таких языков: Pascal, Basik, Fortran, C++, C#, Java и другие. Но всё-равно компьютер не поймёт эти инструкции, он понимает только машинный код, грубо говоря – язык нулей и единиц. Специальные программы, которые переводят приказы, отдаваемые компьютеру на языках высокого уровня в машинный код, называются компиляторами.
Можно ли разобраться в машинном коде, чтобы внести какие-либо изменения или усовершенствования? Напрямую это совершенно невозможно. Конечно, существуют специальные программы – декомпиляторы и дизассемблеры, но текст на языке ассемблера, выдаваемый ими исключительно сложен для понимания и внесения изменений. Гораздо проще править исходный текст на языке высокого уровня, при этом разработка приложений для iOs или других модильных платформ существенно упрощается и ускоряется. Но проблема в том, что подавляющее большинство коммерческого ПО поставляется в виде машинного кода. Таким образом производитель гарантирует себе сохранность идей и разработок, заложенных в программу, а потребитель знает, что никто, кроме разработчика, не вмешается в ПО.
Но существует концепция ПО с открытым исходным кодом. При распространении таких программ разработчик поставляет не только откомпилированную версию, но и исходный текст на языке высокого уровня. Делается это с целью дальнейшего совершенствования программы, ведь любой квалифицированный желающий на основе исходного текста может внести поправки и изменения. Если они будут успешными, то производитель ПО будет поддерживать эти изменения.
Одним из требований к ПО с открытым исходным кодом является его свободное распространение и возможность свободно распространять отредактированные версии программы.
Именно таким образом были созданы и продвигались на рынке операционная система Linux, браузер Mozilla, веб сервер Apache, язык подготовки веб сценариев PERL и ещё очень много другого популярного программного обеспечения.