Защита кода от собственных разработчиков

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

Какие еще существуют подходы, помимо этого чисто легального, для защиты программного кода от людей, которые его разрабатывают? Они вообще существуют? Имеет ли это смысл на практике?

Может быть, например, Team Edition Visual Studio уже содержит некоторые функции, связанные с этой проблемой (например, уровни доступа к частям кода в зависимости от роли внутри команды разработчиков или что-то в этом роде)?

Ссылка по теме:

По статистике, в среднем программисты меняют работу каждые три-четыре года.


person Community    schedule 09.02.2010    source источник
comment
С чисто любопытной точки зрения, зачем это было нужно? Я сразу думаю, что окружающая среда будет хаотичной или у меня будет много опасений по поводу того, что разработчики украдут код и уйдут куда-нибудь еще, чтобы эффективно его использовать. Что-нибудь сверхвысокого уровня, вероятно, должно подавать заявку на патент на программное обеспечение.   -  person Mech Software    schedule 09.02.2010
comment
должно быть вики сообщества   -  person SilentGhost    schedule 09.02.2010
comment
Хех, берет яйца, чтобы спросить об этом на сайте разработчика :)   -  person Pekka    schedule 09.02.2010
comment
Это ужасная идея. Вы, несомненно, создадите среду, способствующую неудачам.   -  person JP Richardson    schedule 09.02.2010
comment
@Mech Software, тот факт, что вы вообще можете запатентовать программное обеспечение, пугает.   -  person mmcdole    schedule 09.02.2010
comment
@Simucal: Как гражданин США, я согласен с вами в отношении патентов на программы.   -  person David Thornley    schedule 10.02.2010
comment
@Simucal: Я тоже согласен. Я не согласен с патентами, однако, исходя из этого вопроса, похоже, что может быть какая-то критическая часть программного обеспечения, которая должна быть разрешена только небольшой группе разработчиков. Это случайный рецепт KFC Secret? :)   -  person Mech Software    schedule 10.02.2010
comment
Программное обеспечение Mech: слово «патент» означает сделать общедоступным. Рецепт KFC Secret почти наверняка является коммерческой тайной, что почти полностью противоположно патенту. Его ценность во многом состоит в том, что он не известен широкой публике.   -  person Ken    schedule 22.05.2010
comment
Если вы не можете доверять своим программистам профессиональное поведение, тогда зачем доверять им писать ваш код?   -  person TheMathemagician    schedule 19.09.2012
comment
Дубликат stackoverflow.com/questions/173875, stackoverflow.com/questions/1382538/   -  person tkruse    schedule 10.01.2018


Ответы (12)


Постарайтесь создать команду, которой можно доверять.

person cherouvim    schedule 09.02.2010
comment
Я согласен. Наверное, лучшая работа, которую я когда-либо выполнял, была в компании, где половина разработчиков проработала там около десяти лет, а некоторые даже дольше. Хорошая политика заставляет людей оставаться, а это, в свою очередь, способствует созданию очень хорошего кода. (Я ухаживаю за этим младенцем более десяти лет, и он в такой хорошей форме, потому что я никогда не допускал туда такого кода. Я требую, чтобы он был очищен!) - person sbi; 16.03.2010

Первый подход - заставить программистов знать только интерфейсы других компонентов, чтобы каждый из них мог украсть только небольшую часть всего программного обеспечения. Такой подход можно позаимствовать из обувного производства. Одна транснациональная корпорация, чтобы предотвратить воровство со стороны сотрудников, устроила свои фабрики таким образом, чтобы каждая фабрика производила только левую или только правую обувь. Вы можете сделать то же самое со своим кодом: одни программисты пишут строки только с нечетными числами, а другие - с четными; при условии, что они не видят работы друг друга! Иногда это называют «парным программированием».

Некоторые организации заставляют сотрудников подписывать соглашение об отказе от конкуренции. Такое соглашение не позволяет программистам работать на конкурентов. Этот метод лучше всего сочетается с объявлениями о вакансиях типа «Ищу старшего программиста с 5-летним опытом работы в аналогичной сфере».

Чтобы ваши программисты не воровали, вы можете причинить им вред, как только они закончат программу. Метод зарекомендовал себя как наиболее эффективный и используется веками. Например, русский царь Иван Грозный зажег глаза архитектору, который спроектировал красивый храм на Красной площади, поэтому спроектированный остается самым красивым из всех когда-либо существовавших. Вы можете сделать что-то подобное со своим архитектором. Я слышал, последняя версия Visual Studio содержит некоторые функции ...

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

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

person Community    schedule 09.02.2010
comment
Следует отметить, что потеря рук абсолютно необходима, иначе вы могли бы прочитать код с помощью дисплеев Брайля. И следует отметить, что, возможно, талантливые люди смогут читать шрифт Брайля пальцами ног, так что, возможно, вам тоже нужно сократить их;) - person Stefan Steiger; 14.08.2013

Как защитить электростанцию ​​от саботажа со стороны сотрудника? Как вы помешаете боксеру бросить бой? Как предотвратить распространение хлопков в публичном доме?

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

person Community    schedule 09.02.2010

Если это действительно необходимо, вы можете разделить приложение на субприложения. Каждая команда работает в одном приложении и видит все остальные как «черные ящики». Может быть, здесь помогает SOA.

person cherouvim    schedule 09.02.2010
comment
Это единственный положительный аспект этой идеи. ИМО: инкапсуляция, ведущая к более документированному модульному коду. - person Pekka; 10.02.2010
comment
И, безусловно, требуется больше времени для создания и доставки продуктов, разработанных таким образом. Брукс говорит, умножьте на три. - person P Shved; 10.02.2010
comment
@ Павел Швед: конечно. - person cherouvim; 10.02.2010

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

person Community    schedule 09.02.2010
comment
Согласитесь: лишь небольшое количество компаний вкладывают столько в НИОКР, что неизданный исходный код действительно дает реальное конкурентное преимущество. - person ZJR; 10.02.2010
comment
Тем не менее я слышал о менеджерах, использующих рабочую силу компании A в пользу компании B, заставляя их реализовывать функции, запрошенные клиентами компании B, а затем продавать их, но очевидно, что такие люди не особо беспокоятся о юридических препятствиях. - person ZJR; 10.02.2010

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

Файл для этого находится в conf \ authz Вот образец

[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average

[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe

[/
# [/foo/bar]
# harry = rw
# &joe = r
# * =

# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r

Некоторую документацию можно найти здесь

В разделе "Контроль доступа к каталогам"

person Community    schedule 09.02.2010

Либо создайте команду разработчиков, которой вы можете доверять, либо полностью заблокируйте их систему, чтобы они не могли получить доступ к USB-портам, дисководу компакт-дисков или клиентам веб-почты. Единственное, что они могли делать, - это работать над кодом и, возможно, просматривать веб-страницы. Также дайте им доступ только к тому коду, за который они отвечают.

Но со всеми этими мерами безопасности ваши разработчики, скорее всего, возненавидят работать с вами и бросят свою работу.

person Community    schedule 09.02.2010
comment
Я знаю парня, который украл код из подобной среды, сделав более 200 снимков экрана своим мобильным телефоном ... - person CesarGon; 09.02.2010
comment
Если они могут просматривать веб-страницы, всегда есть pastebin и тому подобное. - person doppelfish; 09.02.2010
comment
К чёрту, забери и их телефоны !!! Или ты можешь просто быть открытым - person Matt S.; 09.02.2010
comment
@dopplefish, Интернет можно просматривать через клиенты удаленного рабочего стола, копирование и вставка которых запрещено. Удаленный рабочий стол - это мера безопасности, а не защита от кода, поэтому его даже не сложно реализовать. - person P Shved; 10.02.2010

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

Имейте в виду, что декомпиляция фреймворков, которые работают против IL, например .NET, относительно проста, поэтому предотвращение доступа к файлам кода не обязательно является серебряной пулей для защиты IP.

person Community    schedule 09.02.2010

Я знаю, что вы сказали помимо чисто юридического, но я просто хотел бы добавить, что помимо юридического, о котором вы упомянули, есть также Non-Compete. В основном говорит о том, что как только вы уволитесь с работы, вы не сможете никаким образом конкурировать со своим бывшим работодателем. Кража кода не так привлекательна, если вы не сможете использовать его в течение года или двух.

person Brandon    schedule 09.02.2010
comment
По крайней мере, в Великобритании положения о недопустимости конкуренции в трудовых договорах имеют сомнительную полезность - суды, как правило, отдают предпочтение праву работника на работу. - person ; 09.02.2010
comment
Даже здесь, в Штатах, не соревнования проводятся в основном для галочки, и тот, кто занимает высокие моральные позиции, будет пытаться соблюдать то, что они подписали; однако кража кода ВСЕГДА является незаконной и подлежит наказанию. - person Austin Salonen; 09.02.2010
comment
Соглашения об отсутствии конкуренции не мешают кому-либо продать украденный код конкуренту за кулисами. - person doppelfish; 09.02.2010
comment
Соглашения об отказе от конкуренции действительны не во всех штатах США, и, если они имеют обязательную силу, они будут препятствовать компетентным людям работать на вас. - person David Thornley; 10.02.2010

Вы можете заставить их разработать модуль, который будет отделен от остальной части приложения. Если бы у вас была система типов плагинов / модулей, это бы хорошо подошло. Вы можете выпустить API-интерфейсы для разработчиков, чтобы они могли интегрироваться с вашими библиотеками DLL, а не с исходным кодом.

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

person Community    schedule 09.02.2010

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

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

person Community    schedule 09.02.2010

Разрабатывайте свое программное обеспечение по модулям.

Имейте один общий модуль, содержащий объекты, которые передаются туда и обратно, и служебные классы, которые действуют с этими объектами.

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

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

Также очень доверяйте тому, кто запускает ваш сервер контроля версий. Хотя он стабилен, ни один разработчик не может причинить столько вреда; они не могут удалить все, например, и вы будете точно знать, что они сделали и когда, если это когда-нибудь станет проблемой.

person Community    schedule 09.02.2010