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 , имеют части, написанные на языке ассемблера в целях оптимизации.

Некоторые языки допускают использование нескольких языков в одном файле. Например, блок сборки, встроенный в файл C.

Связывание библиотек позволяет писать и компилировать компоненты отдельно, иногда на нескольких языках, а затем интегрировать их в программу. Например, в Java классы компилируются в отдельные файлы, которые связываются интерпретатором во время выполнения . Microsoft Windows поддерживает программы, созданные из DLL ; каждый из которых может быть написан на любом языке, который можно скомпилировать в DLL. Аналогично, Microsoft .NET поддерживает программы, созданные из сборок .NET ; каждый из которых может быть написан на любом языке .NET .

Точкой входа в программу может быть интерпретатор. Интерпретатор может быть разработан для специального языка, специфичного для приложения, или для языка общего назначения, чтобы его можно было использовать для нескольких приложений. [10]

Обычно исходный код хранится в системе контроля версий .

Для создания работоспособного программного обеспечения сложная база кода часто требует создания (компиляции, ассемблирования и т. д.) множества файлов исходного кода — сотен, тысяч и более. Инструкции по сборке, такие как 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». Документация Python . Архивировано из оригинала 3 октября 2012 года . Проверено 17 августа 2014 г.
  10. Роуз, Маргарет (12 августа 2020 г.). «Метод переводчика». Техопедия . Проверено 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 г.

Источники

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