исходный код программы пример
Исходный код: что нужно знать, чтобы успешно защитить права на программное обеспечение?
Программное обеспечение — специфический объект авторских прав. Программы обладают рядом технических характеристик, которые нужно учитывать, чтобы успешно защищать интересы правообладателей. Что такое исходный код программы? Как доказать, что программу украли? Какие методы защиты прав на программное обеспечение наиболее эффективны?
Рассказывает:
Роман Янковский,
советник практики IP & IT юридической фирмы «Томашевская и партнеры»
ГК РФ определяет программу для ЭВМ как совокупность данных и команд, предназначенных для функционирования компьютерных устройств. Программы могут быть выражены на любом языке и в любой форме, включая исходный текст и объектный код (ст. 1261 ГК РФ).
Благодаря такому определению многие юристы воспринимают исходный код программы как текст наподобие литературного произведения. Базовое представление о программе: это некие строки, которые компьютер читает и выполняет по очереди, и таким образом программа работает. Однако такое понимание не учитывает технические нюансы, которые влияют на возможность защиты права на программу.
Какие технические особенности влияют на защиту кода?
Особенность № 1
Большинство языков программирования являются компилируемыми. Это значит, что получить исходный текст чужой программы невозможно, если вам не передал его сам разработчик.
Языки программирования бывают интерпретируемыми и компилируемыми. Программу на интерпретируемом языке программирования компьютер, грубо говоря, построчно читает. Но на практике такие языки программирования используются достаточно редко.
Большинство программ сегодня пишут на компилируемых языках программирования. Такие программы работают только после прохождения специальной процедуры компиляции. Программа-компилятор собирает исходный текст программы, написанной, упаковывает и изменяет его и выдает так называемый исполняемый файл (обычно с расширением «.exe» – от англ. “executable”).
Иными словами, компилятор преобразует исходный текст программы в объектный код, и только после этого программу можно запустить на компьютере.
А куда делся исходный текст программы, который написал программист при разработке программы?
Компилятор преобразовал его в объектный код. Мы не можем вернуть его обратно. Максимум, что мы можем сделать с объектным кодом, — представить его в виде так называемых ассемблерных команд. Ассемблерные команды — это максимально очеловеченное и удобочитаемое представление машинного кода (хотя об удобочитаемости тут можно говорить весьма условно).
Таким образом различают:
Теоретически небольшую программу можно сразу написать на языке низкого уровня (используя ассемблерные команды). Но сейчас так никто не делает, потому что написать даже простую программу на ассемблере — это большой объем работы. Программы пишут на языках программирования высокого уровня в виде исходного текста. Затем, как мы уже говорили, компилятор обрабатывает этот текст и превращает его в смесь цифр и букв – объектный код.
Какое значение это имеет для юристов?
Исходный текст есть только у разработчика программы. Когда разработчик распространяет программу, он делает это в виде скомпилированного файла. Технически из этого файла можно получить только объектный код.
Есть процедура так называемой декомпиляции: специалист пытается воссоздать первоначальный код из ассемблерных команд. Согласно ГК РФ, декомпиляция – это воспроизведение и преобразование объектного кода в исходный текст (ст. 1280 ГК РФ). Однако важно понимать, что даже если специалист смог воссоздать код на языке высокого уровня, который генерирует необходимый объектный код (то есть, по сути, восстановил программу), этот код высокого уровня не будет аналогичен первоначальному. То есть этот «исходный текст» не будет исходным в прямом смысле этого слова: после декомпиляции мы не получим исходный текст, который изначально разработчик обработал компилятором.
Из-за этого у правообладателей возникают сложности с тем, чтобы доказать нарушение прав на программное обеспечение.
В файле программы нет исходного текста. Если ваши права нарушены, вы можете только, грубо говоря, показать чужую программу в суде и сказать, что она очень похожа на вашу и делает то же самое. Однако до суда у вас не будет исходного текста чужой программы, чтобы подтвердить ее тождественность с вашей.
Чтобы доказать нарушение, потребуется судебная экспертиза. Для этого нужно через суд запросить исходный текст у потенциального нарушителя. Но здесь нужно учитывать, что под видом исходного текста оппонент может передать абсолютно сторонний файл. Поэтому правообладателю придется перепроверить, что на выходе переданный исходный текст действительно представляет собой спорную программу.
Особенность № 2
Программы занимают физически очень большой объем.
Количество строк кода в совсем небольшой игре для телефона сопоставимо с количеством строк в ГК РФ. Серьезные программы занимают значительно больший объем. Поэтому не так просто принести в суд распечатку кода своей и чужой программ и сравнить их: это будут две огромные кипы бумаги.
Есть и другой нюанс. Программы могут быть практически идентичны, при этом код в них может быть структурирован по-разному. Технически это возможно – расположение отдельных блоков кода в программе можно менять. В такой ситуации выявить сходство с учетом объема программы будет непросто даже разработчику.
Особенность № 3
Программы постоянно обновляются.
В программы постоянно вносятся изменения. Если программа объемная, то новые версии могут появляться несколько раз в день. Соответственно, у нее нет постоянного кода, который можно было бы депонировать раз и навсегда.
Особенность № 4
Большинство программ пишут на основании уже готового кода.
Программы сегодня не создаются с нуля. Разработчики пишут большинство программ на основе уже готовых модулей, так называемых библиотек. Они бывают платными и бесплатными. Бесплатные библиотеки часто распространяются на условиях открытой лицензии, что представляет проблему для юристов.
Дело в том, что разные типы свободных лицензий накладывают разные обязательства на правообладателя программы, в которой используется готовая библиотека. Так, по одним лицензиям права на библиотеку переходят в общественное достояние и могут использоваться кем угодно. По другим, наоборот, использование библиотек в составе коммерческих программ либо совсем запрещено, либо возможно лишь при условии раскрытия кода (то есть публикации результата в открытом доступе).
Есть два способа внедрить чужую библиотеку в свою программу:
На заметку
Не всё, что юристы называют «программой», выполняет какую-то активную функцию. Например, для создания сайтов используют так называемые языки гипертекстовой разметки. Сайты тоже имеют код, который не отображается при открытии сайта, но отвечает за его техническую функциональность. При этом такой код не является программой в традиционном понимании — это скорее что-то настроек отображения сайта, которые передаются пользователю и обрабатываются его браузером. Поэтому в разных браузерах сайты могут выглядеть по-разному, тогда как команда обычно выдает один и тот же результат на разных компьютерах.
Как оформить и защитить права на программу?
Возможны несколько вариантов оформления прав на программу, чтобы в последующем можно было отстоять права на нее.
Программа для ЭВМ является объектом авторского права. По ГК РФ регистрация для защиты авторских прав не требуется (ст. 1259 ГК РФ).
Однако для программ для ЭВМ такая регистрация возможна: специальный реестр ведет Роспатент. Реестр программ для ЭВМ открыт с 2013 года. Регистрация программы в реестре добровольная.
Переход прав на зарегистрированные программы тоже регистрируется. Также в реестре можно отдельно регистрировать каждую версию программы. Это имеет смысл, если изменения были существенными. Можно зарегистрировать программу любого объема.
Обратите внимание, что код программы не индексируется и не проверяется на работоспособность. Кроме того, новый код не сверяют с кодами, зарегистрированными ранее.
Самое главное: регистрация в реестре не считается правопорождающим фактом. А сам реестр не считается публичным – перед покупкой программы у покупателя нет обязанности проверять в реестре, является ли продавец ее правообладателем.
По сути, регистрация в этом реестре представляет собой механизм добровольного депонирования. Автором программы считается лицо, указанное в реестре, но только пока не доказано иное (п. 6 ст. 1262 ГК РФ, п. 109 Постановления Пленума ВС РФ от 23.04.2019 № 10 «О применении части четвертой Гражданского кодекса Российской Федерации»).
На заметку
Существуют альтернативные способы депонирования программ. Например, у ВОИС недавно появилась услуга онлайн-депонирования интеллектуальных активов. Правда, пока нет практики использования таких сертификатов в качестве доказательств, потому что этот механизм совсем новый – работает с июня 2020 года.
ГК РФ напрямую не предусматривает такой способ защиты прав на программы. Наоборот, в законе указано, что программа для ЭВМ не является изобретением (ст. 1350 ГК РФ). Поэтому при патентовании программы как таковой можно столкнуться со сложностями.
Роман Янковский рекомендует патентовать не саму программу, а алгоритм ее работы. Такие патенты встречаются на практике (например, есть патенты на решения для распределенного реестра).
В качестве примера можно привести спор между приложением для знакомств Tinder и его конкурентом – Bumble. Сервис-конкурент запустили бывшие сотрудники Tinder. У обоих приложений были очень похожие функции, в частности механизм «свайпа», на который у Tinder был патент на промышленный образец.
Распространить режим коммерческой тайны на разработанный софт и потребовать от работников подписать соответствующие документы – это хорошее решение по двум причинам:
Примеры классического кода, ставшего Open Source
В прошлом году NASA опубликовала список программного обеспечения, код которого они разрабатывали в течении долгих лет. NASA уже давно стала знаменита тем, что делится с общественностью своим кодом. Другие же разработчики не всегда готовы пойти на такое. По крайней мере не сразу. Давайте ознакомимся с некоторыми примерами классического кода, который теперь можно и посмотреть, и пощупать.
Бортовой управляющий компьютер КА Аполлон (AGC)
Миссия Apollo на Луну по праву считается колоссальным достижением человечества. Для ее осуществления был проделан не менее колоссальный труд. Это относится и к программному обеспечению, которое разрабатывалось MIT Instrumentation Lab. AGC было установлено и на бортовой, и на лунный модули для обеспечения наведения, навигации и управления. В честь 40 летия миссии Apollo 11 в 2009 году оригинальный код AGC был расшифрован и отсканирован со старых записей и предоставлен в открытом доступе.
Желающие ознакомится с кодом AGC или даже поковыряться в нем могут скачать его (также можно скачать виртуальный симулятор AGC) с сайта Google Code: code.google.com/p/virtualagc
APL — язык программирования, который стал наследником системы математических нотаций для манипулирования массивами. Она была разработана профессором Гарвардского университета Кеннетом Айверсоном, который в дальнейшем повлиял на развитие таких языков программирования как J, Matlab и Mathematica. В 1962-м году, работая на IBM, господин Айверсон сформулировал и опубликовал свою работу в книге под названием A Programming Language (APL). Первой реализацией APL было APLð для компьютеров IBM System/360 в 1966-м году. А в 2012-м IBM совместно с Музеем компьютерной истории выпустили в свет исходный код APLð, содержащий 37500 строк и состоящий из 360 языков ассемблера.
Исходный код APLð доступен для скачивания на сайте Музея компьютерной истории: www.computerhistory.org/atchm/apl360-software-license-agreement
Alto — персональный компьютер, разработанный в Исследовательском Центре Пало Альто (PARC) корпорацией Xerox в 1973-м году. Он стал революционным изобретением, поскольку обладал графическим дисплеем (черно-белый монитор 606×808), а также клавиатурой и мышью. Еще более выдающимся отличием была память 128 KB и дисковое пространство 2.5 MB, что считалось довольно много в то время. Был и концепт рабочего стола и графического пользовательского интерфейса. Однако Alto никогда не продавали, все 1500 экземпляров использовались исключительно в пределах компании Xerox.
На сайте Музея компьютерной истории Вы можете скачать не только ОС, но и множество программного обеспечения и утилит, разработанных для Alto: PUP (PARC Universal Packet) набор мжежсетевых протоколов, Bravo — первый редактор WYSIWYG и 4 языка программирования (BCPL, Mesa, Smalltalk и Lisp): xeroxalto.computerhistory.org/xerox_alto_file_system_archive.html
В 1979-м году Гэри Килдалл, работающий консультантом в компании Intel, начал разработку программного обеспечения для управления флоппи-дисководом (тогда еще новинки). Вскоре эта разработка переросла в новую ОС для компьютеров на основе микропроцессора 8080 от Intel, которую он назвал CP/M (Control Program/Monitor, и в дальнейшем Control Program for Microcomputers). В отличии от других операционных систем того времени CP/M была написана не на стандартном языке программирования, а на созданном самим Килдаллом. CP/M также стала прародителем для вполне обычных в наше время вещей, таких как 8-буквенные имена и 3-буквенные расширения файлов. Килдалл основал компанию Digital Research, Inc. и запатентовал свою операционную систему, которая стала доминирующей среди персональных компьютеров вплоть до появлени в 80-ых DOS.
Исходный код первых 4 версий CP/M можно скачать на сайте Музея компьютерной истории: www.computerhistory.org/atchm/early-digital-research-cpm-source-code
Microsoft BASIC для 6502
В 1975-м году MOS Technology создала 6502 микропроцессор, желая сделать его дешевой альтернативой других микропроцессоров того времени. Microsoft для работы 6502 использовала язык программирования BASIC, который был основан на языке Altair BASIC. Последний был написан Биллом Гейтсом и Полом Алленом в номере отеля в Альбукерке (Нью-Мехико) для микрокомпьютера MITS Altair 8800. Микропроцессор 6502 в дальнейшем использовался во многих популярных компьютерах, таких как Apple I и Apple II, Commodore VIC-20 и на игровой консоли Atari 2600. Microsoft лицензировала BASIC для 6502 и использовала его для реализации других систем (Commodore BASIC и Applesoft BASIC). В этой версии BASIC содержится знаменитая пасхалка WAIT 6502 от Билла Гейтса.
Скачать BASIC для 6502 можно с Pagetable: www.pagetable.com/?p=774
Квест (Adventure) — жанр видео-игр, в основном однопользовательских, с интерактивным сюжетом и решением различных пазлов и задач. Одним из праотцов этого жанра была Colossal Cave Adventure (или просто Adventure), в честь которого и был собственно назван жанр. Игра была создана в 1976-м году Уильямом Кровером (Will Crowther). В тот период он работал инженером в компании Bolt, Beranek & Newman. Также является одним из создателей ARPANET. Кровер создал игру, в которой герой перемещался по различным помещениям пещеры с сокровищами и магией, для своих двух дочерей. Оригинальная версия состояла из 700 строк кода на языке Fortran и запускалась на компьютере BB&N’s PDP-10. Спустя годы выпускник Стэнфорда Дон Вудс нашел копию Adventure и с позволения Кровера расширил игру до 3000 строк программного кода, добавив новые локации и пазлы.
Оригинальную версию кода можно скачать тут: www.icynic.com/
Apple II, выпущенный в 1977-м году, использовал аудио кассеты, а не диски, для загрузки дополнительных программ и хранения данных. Вскоре после выпуска этого компьютера Стив Возняк разработал контроллер для дисков и Apple передал разработку программного обеспечения на аутсорсинг компании Shepardson Microsystems. Разработчик Пол Лугтон (Paul Laughton) создал DOS примерно за 35 дней, записывая код на перфокартах. Apple DOS 3.1 вышла в свет в июне 1978-го года.
Исходный код DOS 3.1 можно скачать на сайте Музея компьютерной истории: www.computerhistory.org/atchm/apple-ii-dos-source-code
Знаменитая на весь мир операционная система впервые была создана для персональных компьютеров IBM’s x86. Эта ОС не была написана с чистого листа, а основывалась на предыдущих версиях, 86-DOS (была написана Тимом Патерсоном из Seattle Computer Products, после приобретена Microsoft). Первая версия, MS-DOS 1.1 (названная в честь 86-DOS 1.1), была выпущена в 1981-м году. Исходный код этой ОС также содержит множество шуточных слов и фраз.
E.T. the Extra Terrestrial
E.T. («Инопланетянин») стал самым популярным фильмом 1980-х годов и основой для одной из самых худших игр всех времен. Желая заработать на популярности киноленты, компания Atari поручила Говарду Уоршоу создать игру для популярной в то время консоли 2600. Проблема в том, что из-за жадности и желания продать как можно больше копий игры именно в период Рождественских праздников, Atari выделила на проект всего 5 недель. В результате неразумных сроков пострадало качество игры, и ее продажи едва перевалили за 1,5 миллиона копий, 3,5 миллиона копий остались нереализованными. В 2006 году Денис Дебро переработал игру, исправив многочисленные баги и добавив в нее свои новые компоненты.
Оригинальную версию исходного кода можно скачать с Pastebin: pastebin.com/AaSYZTHt
Джон Д. Кармак и Джон Ромеро из id Software в 1992 году создали поистине культовую видео-игру, ставшую прародителем множества FPS, — Wolfenstein 3D. Изначально игра была разработана для компьютеров на базе MS-DOS, однако она дошла и до наших современных устройств, была портирована даже на iOS. Также Wolfenstein 3D дала толчок для появления Doom, Duke Nukem и Quake. Исходный код Wolfenstein 3D на ряду с проектом-сиквелом Spear of Destiny был опубликован еще в 1995 году.
MacPaint — знаменитое программное обеспечение для работы с растровыми изображениями. MacPaint был одним из 2 приложений, доступных на первых компьютерах Macintosh в январе 1984 года (второе — текстовое приложение MacWrite). Редактор изображений был разработан Вилли Аткинсоном, одним из первых творцов Macintosh, и основывался на его же более ранней разработке LisaSketch для компьютеров Apple Lisa. MacPaint предоставлял пользователям много тех функций, которые мы уже считаем обычным делом (инструмент заливки, захват изображения лассо). В 2010, с разрешения Стива Джобса, Музей компьютерной истории выпустил исходный код MacPaint 1.3, который содержит 5800 строк.
Заинтересовавшиеся, вот ссылка для скачивания этого кода: s3data.computerhistory.org/102658076_macpaint_acc.zip
Внимание! При переходе по данной ссылке, скачивание начнется автоматически.
Ссылка для скачивания: s3data.computerhistory.org/102658076_quickdraw_acc.zip
Внимание! При переходе по данной ссылке, скачивание начнется автоматически.
Градостроительный симулятор без конца, без побед и поражений — SimCity стал первым в своем роде. Хоть он и был разработан еще в 1985-м году Уиллом Райтом, релиз состоялся только в 1989-м. Так как издательство боялось, что концепция бесконечной и бессюжетной игры не придется по вкусу покупателям. Однако, все мы знаем что они очень сильно ошибались. SimCity стала прародителем жанра и вдохновителем множества других игровых проектов, и была названа одной из 10 самых значимых игр в истории. Дон Хопкинс в 2008-м году выложил на своем сайте исходный код SimCity, но под названием Micropolis, поскольку игровой издатель EA владеет правами на торговую марку SimCity.
Ссылка для скачивания исходного кода SimCity: www.donhopkins.com/home/micropolis/micropolis-activity-source.tgz
Внимание! При переходе по данной ссылке, скачивание начнется автоматически.
Atari 7800 ProSystem OS + игры
Atari 7800 ProSystem (январь 1986-го) стала первой широко распространенной игровой консолью. Позиционировалась как домашняя консоль, потому обладала возможностью подключения клавиатуры и других периферийных устройств. В итоге, было разработано менее 100 игр под эту консоль. Потом порт для подключения периферийных устройств был убран в 1992-м году. В 2009-м году Музею Atari удалось спасти исходный код операционной системы и несколько игр, с выброшенных после закрытия компании в 1996-м году, дискет.
Word for Windows 1.1a
Когда большинство людей думают о текстовом редакторе, они вспоминают Microsoft Word. Изначально это программное обеспечение было разработано для системы DOS в 1983-м под руководством Чарльза Симони, который также создал первый текстовый WYSIWYG обработчик Bravo для компании Xerox в 1974-м году. Изначально Microsoft Word уступил дорогу WordPerfect, но уже в 1989-м году в Windows появился именно этот текстовый редактор, ставший в последствии монополистом на Windows ОС.
Исходный код Word for Windows 1.1a доступен для скачивания на сайте Музея компьютерной истории: www.computerhistory.org/atchm/microsoft-research-license-agreement-msword-v-1-1a
Prince of Persia — фентезийная видео-игра, созданная под Apple II Джорданом Мекнером и изданная в октябре 1989-го года компанией Brøderbund Software. Свою невероятную популярность и похвальный отзывы как критиков так и самих игроков игра заполучила за счет своей невероятной анимации. Мекнер просматривал записи того, как его брат прыгает и бегает по парковке, после переносил все эти движения в саму игру. Prince of Persia стал локомотивом множества игр данной серии и даже полнометражного кинофильма. К сожалению оригинальный исходный код был давно утрачен, но Мекнер нашел пачку старых дискет, которые когда-то решил сохранить. С них он и смог восстановить код и выпустить его в свет в 2012 году.
На сайте GitHub Вы можете скачать данный исходный код: github.com/jmechner/Prince-of-Persia-Apple-II
Adobe Photoshop 1.0.1
Photoshop был разработан двумя братьями Томасом и Джоном Нолл в конце 1980-х. Изначально программа называлась просто Display, потом Image Pro. После того, как создатели осознали весь потенциал своего детища, они лицензировали проект под название Photoshop to Adobe. Версия 1.0 была выпущена в 1990 году (изначально только для компьютеров Mac). Продажи составили 3 миллиона копий за первые 10 лет. Изначальная версия исходного кода для версии 1.0.1 из 128000 строк (по большей части на языке Pascal) стала доступна для всех желающих в 2012 году.
Microsoft C# и Visual Basic
Надеюсь, что данный список был полезен, ведь историю (не только цивилизаций, но и программирования) забывать не стоит. Она может научить нас многому. Понаблюдать, как создавался тот или иной культовый программный продукт и поковыряться в его «составе» — крайне интересно.
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. (Мартин Голдинг)