Компьютерная программа
Компью́терная програ́мма — 1) комбинация компьютерных инструкций и данных, позволяющая аппаратному обеспечению вычислительной системы выполнять вычисления или функции управления (стандарт ISO/IEC/IEEE 24765:2010); 2) синтаксическая единица, которая соответствует правилам определённого языка программирования, состоящая из определений и операторов или инструкций, необходимых для определённой функции, задачи или решения проблемы (стандарт ISO/IEC 2382-1:1993).

Первое определение соответствует понятию «исполняемая программа», второе относится к понятию «исходный текст».

Другие определения из нормативных документов:
 данные, предназначенные для управления конкретными компонентами системы обработки данных в целях реализации определённого алгоритма (ГОСТ 19781—90);
 представленная в объективной форме совокупность данных и команд, предназначенных для функционирования  ЭВМ и других компьютерных устройств с целью получения определённого результата, включая подготовительные материалы, полученные в ходе разработки программы для ЭВМ, и порождаемые ею аудиовизуальные отображения (Гражданский кодекс Российской Федерации).

Компьютерные программы как объект авторского права и других прав интеллектуальной собственности относятся к категории нематериальных активов.

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

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

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

Запись исходных текстов программ при помощи  языков программирования облегчает понимание и редактирование человеком. Этому, в частности, помогают комментарии, допустимые в синтаксисе большинства языков. Для выполнения на компьютере готовый текст программы преобразуется (компилируется) в машинный код.

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

Интерпретируемые программы, для которых, как правило, не применяется процесс компиляции и которые интерпретируются операционной системой или специальными программами-интерпретаторами, называются скриптами или «сценариями».

Исходные тексты компьютерных программ в большинстве языков программирования состоят из списка инструкций, точно описывающих заложенный алгоритм. Подобный подход в программировании называется императивным. Однако применяются и другие методологии программирования. Например, описание исходных и требуемых характеристик обрабатываемых данных и предоставление выбора подходящего алгоритма решения специализированной программе-интерпретатору — такой подход называется декларативным программированием. К декларативному программированию относятся функциональное и логическое, а также менее распространённые виды программирования.

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

Хранение и выполнение 

До момента, когда пользователь компьютера явно или неявно выдаст запрос на выполнение компьютерной программы, она обычно хранится в энергонезависимой памяти. При получении такого запроса программа посредством другой компьютерной программы, называющейся операционной системой, загружается в память с произвольным доступом, откуда её непосредственно может выполнять центральный процессор. После этого центральный процессор выполняет программу, инструкция за инструкцией, до её завершения. Выполняющаяся программа называется процессом. Завершение программы происходит либо по достижении её последней инструкции (обычно передающей управление операционной системе), либо по ошибке, программной или аппаратной.

Одновременное выполнение 

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

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

Самомодифицирующиеся программы 

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

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

Правовые аспекты 
Согласно ст. 1261 ГК РФ, программой для ЭВМ является представленная в объективной форме совокупность данных и команд, предназначенных для функционирования ЭВМ и других компьютерных устройств в целях получения определённого результата, включая подготовительные материалы, полученные в ходе разработки программы для ЭВМ, и порождаемые ею аудиовизуальные отображения.

Программы с общедоступными исходными текстами называются открытыми.

Компьютерные программы в большинстве стран являются объектами авторского права (включая Украину и Россию). В некоторых странах компьютерные программы могут защищаться патентами. Патентованию компьютерных программ способствовало Соглашение о торговых аспектах прав интеллектуальной собственности, которое установило минимальные требования к охраняемому ряду объектов прав интеллектуальной собственности и фактически разрешило патентовать программы. Соглашение ТРИПС обязательно для выполнения на территории Украины и России как государств - членов ВТО.

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

Исключительное право на программы для ЭВМ и базы данных возникает автоматически с момента её создания и действует в течение всей жизни автора и семидесяти лет, считая с 1 января года, следующего за годом смерти автора (либо смерти последнего из соавторов).

Действующим законодательством Российской Федерации не предусмотрено патентование компьютерных программ как таковых. Данные объекты интеллектуальной собственности охраняются авторским правом, которое возникает автоматически с момента их создания и не требуют обязательной государственной регистрации. Однако программы для ЭВМ и базы данных могут быть зарегистрированы в Роспатенте по желанию правообладателя.

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

См. также 
 Программное обеспечение
 Утилита
 Встроенное программное обеспечение

Примечания

Литература 

 
 
 
 

Программирование
Программное обеспечение