В вычислительной технике исходный код или просто код — это любая совокупность текста с комментариями или без них , написанная с использованием удобочитаемого языка программирования , обычно в виде обычного текста . Исходный код программы специально разработан для облегчения работы программистов , которые определяют действия, которые должен выполнять компьютер, в основном путем написания исходного кода.
Исходный код часто преобразуется ассемблером или компилятором в двоичный машинный код , который может выполняться компьютером. Машинный код будет доступен для выполнения позднее.
Большая часть прикладного программного обеспечения распространяется в форме, включающей только исполняемые файлы. Если бы исходный код был включен, он был бы полезен пользователю , программисту или системному администратору , любой из которых мог бы пожелать изучить или изменить программу.
Альтернативно, в зависимости от используемой технологии, исходный код может интерпретироваться и выполняться напрямую.
Определение Ричарда Столлмана , сформулированное в его основополагающей лицензии 1989 года , предлагало исходный код как любую форму, в которой модифицируется программное обеспечение:
«Исходный код» произведения означает предпочтительную форму произведения для внесения в него изменений. [2]
Некоторые классические источники определяют исходный код как текстовую форму языков программирования, например:
Исходный код (также называемый исходным кодом или кодом) — это версия программного обеспечения в том виде, в каком она изначально написана (т. е. введена в компьютер) человеком в виде обычного текста (т. е. читаемых человеком буквенно-цифровых символов). [3]
Это соответствует тому факту, что, когда впервые появился перевод программ , современной формой производства программного обеспечения были текстовые языки программирования, поэтому исходный код был текстовым кодом, а машинный код был целевым кодом. Однако по мере того, как конвейеры программирования начали включать в себя больше промежуточных форм, некоторые из которых были в таких языках, как JavaScript, которые могли быть как исходными, так и целевыми, текстовый код перестал быть синонимом исходного кода.
Таким образом, определение Столлмана учитывает амбивалентность исходно-целевого использования JavaScript и HTML, а также возможные будущие формы производства программного обеспечения, такие как языки визуального программирования или наборы данных в машинном обучении. [4] [5]
Однако другие более широкие интерпретации считают, что исходный код включает в себя машинный код вместе со всеми языками высокого уровня, которые его создают. Это определение отменяет исходное различие между машиной и текстом, считая каждый шаг перевода программы исходным кодом.
Для ясности под «исходным кодом» понимается любое полностью исполняемое описание программной системы. Поэтому он так истолкован, что включает в себя машинный код, языки очень высокого уровня и исполняемые графические представления систем. [6] [7]
Такой подход позволяет использовать гораздо более гибкий подход к системному анализу, избавляя дизайнера от необходимости сотрудничать путем публикации удобной формы для понимания и модификации. Его также можно применить к сценариям, где дизайнер не нужен, например, к ДНК. Однако эта форма анализа не предполагает более дорогостоящего межмашинного анализа кода, чем межмашинный анализ кода.
Самые ранние программы для компьютеров с сохраненными программами вводились в двоичном виде с помощью переключателей на передней панели компьютера. В этом языке программирования первого поколения не было различия между исходным кодом и машинным кодом .
Когда IBM впервые предложила программное обеспечение для работы со своей машиной, исходный код был предоставлен без дополнительной оплаты. В то время стоимость разработки и поддержки программного обеспечения была включена в стоимость оборудования. На протяжении десятилетий IBM распространяла исходный код вместе с лицензиями на свои программные продукты, вплоть до 1983 года. [8]
Большинство первых компьютерных журналов публиковали исходный код в виде программ для ввода текста .
Иногда весь исходный код большой программы публикуется в виде книги в твердом переплете, например, Computers and Typesetting , vol. B: TeX, Программа Дональда Кнута , Исходный код и внутренние компоненты PGP Филиппа Циммермана , PC SpeedScript Рэнди Томпсона и µC/OS, Ядро реального времени Жана Лабросса.
Исходный код, составляющий программу , обычно хранится в одном или нескольких текстовых файлах , хранящихся на жестком диске компьютера ; обычно эти файлы тщательно сгруппированы в дерево каталогов , известное как дерево исходного кода . Исходный код также может храниться в базе данных (как это обычно бывает с хранимыми процедурами ) или где-то еще.
Исходный код конкретной части программного обеспечения может содержаться в одном файле или во многих файлах. Хотя это редкость, исходный код программы может быть написан на разных языках программирования. [9] Например, программа, написанная в основном на языке программирования C , может содержать части, написанные на языке ассемблера в целях оптимизации. Также возможно, что некоторые компоненты программного обеспечения будут написаны и скомпилированы отдельно на произвольном языке программирования, а затем интегрированы в программное обеспечение с использованием метода, называемого связыванием библиотек . В некоторых языках, например Java , это можно сделать во время выполнения (каждый класс компилируется в отдельный файл, который связывается интерпретатором во время выполнения).
Еще один метод — сделать основную программу интерпретатором языка программирования [10] , либо разработанного специально для рассматриваемого приложения, либо общего назначения, а затем записать большую часть фактической пользовательской функциональности в виде макросов или других форм надстроек. на этом языке — подход, используемый, например, в текстовом редакторе GNU Emacs .
База кода проекта компьютерного программирования — это большая коллекция всего исходного кода всех компьютерных программ , составляющих проект. Сопровождение баз кода в системах контроля версий стало обычной практикой . Программное обеспечение средней сложности обычно требует компиляции или сборки нескольких, иногда десятков или даже сотен различных файлов исходного кода. В этих случаях инструкции по компиляции, такие как Makefile , включены в исходный код. Они описывают программные связи между файлами исходного кода и содержат информацию о том, как их компилировать.
Исходный код в основном используется в качестве входных данных для процесса создания исполняемой программы (т. е. он компилируется или интерпретируется ). Он также используется как метод передачи алгоритмов между людьми (например, фрагменты кода в книгах). [11]
Программистам часто полезно просмотреть существующий исходный код, чтобы узнать о методах программирования. [11] Совместное использование исходного кода между разработчиками часто упоминается как фактор, способствующий развитию их навыков программирования. [11] Некоторые люди считают исходный код выразительным художественным средством . [12]
Портирование программного обеспечения на другие компьютерные платформы обычно чрезвычайно сложно без исходного кода. Без исходного кода для конкретной части программного обеспечения переносимость обычно требует больших вычислительных затрат. [13] Возможные варианты портирования включают бинарную трансляцию и эмуляцию исходной платформы.
Декомпиляция исполняемой программы может использоваться для генерации исходного кода либо на ассемблере , либо на языке высокого уровня .
Программисты часто адаптируют исходный код одной части программного обеспечения для использования в других проектах. Эта концепция известна как возможность повторного использования программного обеспечения .
Ситуация варьируется во всем мире, но в Соединенных Штатах до 1974 года программное обеспечение и его исходный код не охранялись авторским правом и, следовательно, всегда являлись общественным достоянием . [14]
В 1974 году Комиссия США по новым технологическим использованию произведений, защищенных авторским правом (CONTU), решила, что «компьютерные программы, в той степени, в которой они воплощают оригинальное творение автора, являются надлежащим объектом авторского права». [15] [16]
В 1983 году в судебном деле США «Эппл против Франклина» было постановлено, что то же самое применимо и к объектному коду ; и что Закон об авторском праве придал компьютерным программам статус авторских прав литературных произведений.
В 1999 году в судебном деле США Бернштейн против Соединенных Штатов было также постановлено, что исходный код можно считать защищенной конституцией формой свободы слова . Сторонники свободы слова утверждали, что, поскольку исходный код передает информацию программистам, написан на определенном языке и может использоваться для обмена юмором и других творческих занятий, он является защищенной формой общения. [17] [18] [19]
Авторские права [гггг] [имя владельца авторских прав]
Лицензия Apache версии 2.0 («Лицензия»); вы не можете использовать этот файл, кроме как в соответствии с Лицензией. Вы можете получить копию Лицензии по адресу
- http://www.apache.org/licenses/LICENSE-2.0
Если это не требуется действующим законодательством или не согласовано в письменной форме, программное обеспечение, распространяемое по Лицензии, распространяется на условиях «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ, явных или подразумеваемых. См. Лицензию для определения конкретного языка, регулирующего разрешения и ограничения в рамках Лицензии.
Автор такого нетривиального произведения , как программное обеспечение, [16] имеет несколько исключительных прав , в том числе авторские права на исходный код и объектный код . [21] Автор имеет право и возможность предоставлять заказчикам и пользователям своего программного обеспечения часть своих исключительных прав в форме лицензирования программного обеспечения . Программное обеспечение и сопровождающий его исходный код могут быть связаны с несколькими парадигмами лицензирования; Наиболее важным различием является свободное программное обеспечение и несвободное программное обеспечение . Это делается путем включения уведомления об авторских правах , в котором излагаются условия лицензирования. Если уведомление не найдено, то по умолчанию подразумевается «Все права защищены» .
Вообще говоря, программное обеспечение является свободным программным обеспечением, если его пользователи могут свободно использовать его для любых целей, изучать и изменять его исходный код, давать или продавать его точные копии, а также давать или продавать его модифицированные копии. Программное обеспечение является собственностью , если оно распространяется, а исходный код хранится в секрете или находится в частной собственности и ограничено. Одной из первых опубликованных лицензий на программное обеспечение, явно предоставляющих эти свободы, была Стандартная общественная лицензия GNU, выпущенная в 1989 году; лицензия BSD — еще один ранний пример 1990 года.
В случае несвободного программного обеспечения положения различных законов об авторском праве, коммерческой тайне и патентах используются для сохранения закрытости исходного кода. Кроме того, многие части розничного программного обеспечения поставляются с лицензионным соглашением с конечным пользователем (EULA), которое обычно запрещает декомпиляцию , обратное проектирование , анализ, модификацию или обход защиты от копирования . Типы защиты исходного кода — помимо традиционной компиляции в объектный код — включают шифрование кода, обфускацию кода или морфирование кода .
То, как написана программа, может иметь важные последствия для ее сопровождающих. Соглашения о кодировании , которые подчеркивают читаемость , и некоторые соглашения, специфичные для языка, направлены на поддержку исходного кода программного обеспечения, что включает в себя отладку и обновление . Другие приоритеты, такие как скорость выполнения программы или возможность компилировать программу для нескольких архитектур, часто делают читаемость кода менее важным фактором, поскольку качество кода обычно зависит от его назначения .
В 1983 году IBM отменила свою 20-летнюю политику распространения исходного кода вместе с лицензиями на программные продукты.
будут введены правила, требующие от иностранных фирм раскрывать секретную информацию о цифровой бытовой технике и других продуктах с мая следующего года, сообщает Yomiuri Shimbun со ссылкой на неназванные источники. Если компания откажется раскрыть информацию, Китай запретит ей экспортировать продукцию на китайский рынок, а также производить или продавать ее в Китае, сообщает газета.