stringtranslate.com

Исходный код

Простой пример исходного кода на языке C , процедурном языке программирования . Полученная программа печатает на экране компьютера «привет, мир». Этот первый известный фрагмент « Привет, мир » из основополагающей книги «Язык программирования C» написан Брайаном Керниганом из Bell Laboratories в 1974 году . [1]

В вычислительной технике исходный код или просто код — это любая совокупность текста с комментариями или без них , написанная с использованием удобочитаемого языка программирования , обычно в виде обычного текста . Исходный код программы специально разработан для облегчения работы программистов , которые определяют действия, которые должен выполнять компьютер, в основном путем написания исходного кода.

Исходный код часто преобразуется ассемблером или компилятором в двоичный машинный код , который может выполняться компьютером. Машинный код будет доступен для выполнения позднее.

Большая часть прикладного программного обеспечения распространяется в форме, включающей только исполняемые файлы. Если бы исходный код был включен, он был бы полезен пользователю , программисту или системному администратору , любой из которых мог бы пожелать изучить или изменить программу.

Альтернативно, в зависимости от используемой технологии, исходный код может интерпретироваться и выполняться напрямую.

Определения

Определение Ричарда Столлмана , сформулированное в его основополагающей лицензии 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, Ядро реального времени Жана Лабросса.

Организация

Исходный код, составляющий программу , обычно хранится в одном или нескольких текстовых файлах , хранящихся на жестком диске компьютера ; обычно эти файлы тщательно сгруппированы в дерево каталогов , известное как дерево исходного кода . Исходный код также может храниться в базе данных (как это обычно бывает с хранимыми процедурами ) или где-то еще.

Более сложный пример исходного кода Java . Написанный в стиле объектно-ориентированного программирования , он демонстрирует шаблонный код . Комментарии пролога обозначены красным, встроенные комментарии — зеленым, а операторы программы — синим.

Исходный код конкретной части программного обеспечения может содержаться в одном файле или во многих файлах. Хотя это редкость, исходный код программы может быть написан на разных языках программирования. [9] Например, программа, написанная в основном на языке программирования C , может содержать части, написанные на языке ассемблера в целях оптимизации. Также возможно, что некоторые компоненты программного обеспечения будут написаны и скомпилированы отдельно на произвольном языке программирования, а затем интегрированы в программное обеспечение с использованием метода, называемого связыванием библиотек . В некоторых языках, например Java , это можно сделать во время выполнения (каждый класс компилируется в отдельный файл, который связывается интерпретатором во время выполнения).

Еще один метод — сделать основную программу интерпретатором языка программирования [10] , либо разработанного специально для рассматриваемого приложения, либо общего назначения, а затем записать большую часть фактической пользовательской функциональности в виде макросов или других форм надстроек. на этом языке — подход, используемый, например, в текстовом редакторе GNU Emacs .

База кода проекта компьютерного программирования — это большая коллекция всего исходного кода всех компьютерных программ , составляющих проект. Сопровождение баз кода в системах контроля версий стало обычной практикой . Программное обеспечение средней сложности обычно требует компиляции или сборки нескольких, иногда десятков или даже сотен различных файлов исходного кода. В этих случаях инструкции по компиляции, такие как Makefile , включены в исходный код. Они описывают программные связи между файлами исходного кода и содержат информацию о том, как их компилировать.

Цели

Исходный код в основном используется в качестве входных данных для процесса создания исполняемой программы (т. е. он компилируется или интерпретируется ). Он также используется как метод передачи алгоритмов между людьми (например, фрагменты кода в книгах). [11]

Программистам часто полезно просмотреть существующий исходный код, чтобы узнать о методах программирования. [11] Совместное использование исходного кода между разработчиками часто упоминается как фактор, способствующий развитию их навыков программирования. [11] Некоторые люди считают исходный код выразительным художественным средством . [12]

Портирование программного обеспечения на другие компьютерные платформы обычно чрезвычайно сложно без исходного кода. Без исходного кода для конкретной части программного обеспечения переносимость обычно требует больших вычислительных затрат. [13] Возможные варианты портирования включают бинарную трансляцию и эмуляцию исходной платформы.

Декомпиляция исполняемой программы может использоваться для генерации исходного кода либо на ассемблере , либо на языке высокого уровня .

Программисты часто адаптируют исходный код одной части программного обеспечения для использования в других проектах. Эта концепция известна как возможность повторного использования программного обеспечения .

Правовые аспекты

Ситуация варьируется во всем мире, но в Соединенных Штатах до 1974 года программное обеспечение и его исходный код не охранялись авторским правом и, следовательно, всегда являлись общественным достоянием . [14]

В 1974 году Комиссия США по новым технологическим использованию произведений, защищенных авторским правом (CONTU), решила, что «компьютерные программы, в той степени, в которой они воплощают оригинальное творение автора, являются надлежащим объектом авторского права». [15] [16]

В 1983 году в судебном деле США «Эппл против Франклина» было постановлено, что то же самое применимо и к объектному коду ; и что Закон об авторском праве придал компьютерным программам статус авторских прав литературных произведений.

В 1999 году в судебном деле США Бернштейн против Соединенных Штатов было также постановлено, что исходный код можно считать защищенной конституцией формой свободы слова . Сторонники свободы слова утверждали, что, поскольку исходный код передает информацию программистам, написан на определенном языке и может использоваться для обмена юмором и других творческих занятий, он является защищенной формой общения. [17] [18] [19]

Лицензирование

Пример уведомления об авторских правах: [20]

Авторские права [гггг] [имя владельца авторских прав]

Лицензия Apache версии 2.0 («Лицензия»); вы не можете использовать этот файл, кроме как в соответствии с Лицензией. Вы можете получить копию Лицензии по адресу

http://www.apache.org/licenses/LICENSE-2.0

Если это не требуется действующим законодательством или не согласовано в письменной форме, программное обеспечение, распространяемое по Лицензии, распространяется на условиях «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ, явных или подразумеваемых. См. Лицензию для определения конкретного языка, регулирующего разрешения и ограничения в рамках Лицензии.

Автор такого нетривиального произведения , как программное обеспечение, [16] имеет несколько исключительных прав , в том числе авторские права на исходный код и объектный код . [21] Автор имеет право и возможность предоставлять заказчикам и пользователям своего программного обеспечения часть своих исключительных прав в форме лицензирования программного обеспечения . Программное обеспечение и сопровождающий его исходный код могут быть связаны с несколькими парадигмами лицензирования; Наиболее важным различием является свободное программное обеспечение и несвободное программное обеспечение . Это делается путем включения уведомления об авторских правах , в котором излагаются условия лицензирования. Если уведомление не найдено, то по умолчанию подразумевается «Все права защищены» .

Вообще говоря, программное обеспечение является свободным программным обеспечением, если его пользователи могут свободно использовать его для любых целей, изучать и изменять его исходный код, давать или продавать его точные копии, а также давать или продавать его модифицированные копии. Программное обеспечение является собственностью , если оно распространяется, а исходный код хранится в секрете или находится в частной собственности и ограничено. Одной из первых опубликованных лицензий на программное обеспечение, явно предоставляющих эти свободы, была Стандартная общественная лицензия GNU, выпущенная в 1989 году; лицензия BSD — еще один ранний пример 1990 года.

В случае несвободного программного обеспечения положения различных законов об авторском праве, коммерческой тайне и патентах используются для сохранения закрытости исходного кода. Кроме того, многие части розничного программного обеспечения поставляются с лицензионным соглашением с конечным пользователем (EULA), которое обычно запрещает декомпиляцию , обратное проектирование , анализ, модификацию или обход защиты от копирования . Типы защиты исходного кода — помимо традиционной компиляции в объектный код — включают шифрование кода, обфускацию кода или морфирование кода .

Качество

То, как написана программа, может иметь важные последствия для ее сопровождающих. Соглашения о кодировании , которые подчеркивают читаемость , и некоторые соглашения, специфичные для языка, направлены на поддержку исходного кода программного обеспечения, что включает в себя отладку и обновление . Другие приоритеты, такие как скорость выполнения программы или возможность компилировать программу для нескольких архитектур, часто делают читаемость кода менее важным фактором, поскольку качество кода обычно зависит от его назначения .

Смотрите также

Рекомендации

  1. ^ Керниган, Брайан В. «Программирование на C: Учебное пособие» (PDF) . Bell Laboratories, Мюррей-Хилл, Нью-Джерси. Архивировано из оригинала (PDF) 23 февраля 2015 года.
  2. ^ «Универсальная общественная лицензия GNU v3.0» . Проект ГНУ . Фонд свободного программного обеспечения. 29 июня 2007 г. Архивировано из оригинала 15 января 2024 г.
  3. ^ «Определение исходного кода» . Информационный проект Linux . 14 февраля 2006 г. [23 мая 2004 г.]. Архивировано из оригинала 3 октября 2017 года.
  4. ^ «Что такое свободное программное обеспечение?». ГНУ . Архивировано из оригинала 3 июля 2017 года . Проверено 12 декабря 2015 г.
  5. Столлман, Ричард (15 ноября 2017 г.). «Ловушка JavaScript». Проект ГНУ . Проверено 20 июля 2022 г.
  6. ^ «Почему анализ исходного кода и манипулирование им всегда будут важны», Марк Харман , 10-я Международная рабочая конференция IEEE по анализу и манипулированию исходным кодом (SCAM 2010). Тимишоара , Румыния , 12–13 сентября 2010 г.
  7. ^ "Рабочая конференция по мошенничеству" . Архивировано 29 сентября 2017 года в Wayback Machine .
  8. ^ Мартин Гетц (8 февраля 1988 г.). «Только объектный код: IBM играет честно?». Компьютерный мир . Том. 22, нет. 6. с. 59. В 1983 году IBM отменила свою 20-летнюю политику распространения исходного кода вместе с лицензиями на программные продукты.
  9. ^ «Расширение и встраивание интерпретатора Python». docs.python.org . Архивировано из оригинала 3 октября 2012 года . Проверено 17 августа 2014 г.
  10. ^ "Метод интерпретатора - Техопедия" . Techopedia.com . Проверено 4 августа 2022 г.
  11. ^ abc Spinellis, D: Чтение кода: перспектива открытого исходного кода . Аддисон-Уэсли Профессионал, 2003. ISBN 0-201-79940-5 
  12. ^ « Искусство и компьютерное программирование » ONLamp.com. Архивировано 20 февраля 2018 г. в Wayback Machine (2005).
  13. ^ «Переносимость программного обеспечения — CodeProject» . www.codeproject.com . Проверено 4 августа 2022 г.
  14. ^ Лю, Джозеф П.; Доган, Стейси Л. (2005). «Закон об авторском праве и специфика предмета: случай компьютерного программного обеспечения». Ежегодный обзор американского права Нью-Йоркского университета . 61 (2). Архивировано из оригинала 25 июня 2021 года.
  15. ^ Apple Computer, Inc. против Franklin Computer Corporation возвращает байт под защиту авторских прав для компьютерных программ. Архивировано 7 мая 2017 г. в Wayback Machine в Юридическом обзоре Университета Золотые Ворота, том 14, выпуск 2, статья 3, Ян Л. Нуссбаум (январь). 1984)
  16. ^ аб Лемли, Менелл, Мерджес и Самуэльсон. Программное обеспечение и интернет-право , с. 34.
  17. ^ «Информация» (PDF) . кр.йп.то. Архивировано (PDF) из оригинала 7 июня 2011 года . Проверено 27 декабря 2019 г.
  18. Бернштейн против Министерства юстиции США. Архивировано 4 апреля 2018 г. в Wayback Machine на eff.org.
  19. EFF в 25 лет: Вспоминая случай, в котором код стал речью. Архивировано 5 января 2018 г. на Wayback Machine на EFF.org Элисон Дэйм-Бойл (16 апреля 2015 г.).
  20. ^ «Лицензия». www.apache.org. Архивировано из оригинала 23 сентября 2015 года . Проверено 27 декабря 2019 г.
  21. Хэнкок, Терри (29 августа 2008 г.). «Что, если авторское право не распространяется на двоичные исполняемые файлы?». Журнал свободного программного обеспечения . Архивировано из оригинала 25 января 2016 года . Проверено 25 января 2016 г.

Источники

Внешние ссылки