?

Log in

No account? Create an account
Ни о какой безапелляционности в моих высказываниях не может быть и речи! [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

об исходниках [июл. 14, 2007|05:18 pm]
Anatoly Vorobey
[Tags|]

О ценности исходников вне конкретного проекта:
Is your code worthless?

...There is extraordinarily little code theft in this industry (even though we’re in the era of burnable DVDs and USB keys) because most code - above and beyond the industry-wide frameworks and libraries - has no value at all outside of a specific project with a specific group of developers. Trying to use it for other projects is often worse than starting with nothing at all.


Верно подмечено, и мне приходилось об этом не раз задумываться.

Вот взять например код ЖЖ, над которым я работал почти три года. Все это время он был open-source. Любой мог взять его, построить свой клон ЖЖ, причем LiveJournal.com это не просто приветствовал, а еще и помогал советами, подсказывал, где что починить, если не работало, итд.

Казалось бы, готовая система для блог-сайта, с комментариями, с френдлентами, весь код уже написан, все работает. Бери и делай что хочешь: вставляй в свой сайт, меняй на свой вкус, добавляй новые возможности. И какое-то время многие пытались! Где-то в конце 2001 и на протяжении 2002 было довольно много сайтов и проектов, основанных на коде ЖЖ, судя по тому, сколько людей к нам обращались за советами и предложениями. Довольно много - больше десятка, скажем. И это те, о которых мы знали, ведь никто не обязан доложиться, а если сайт внутрикорпоративный, так его снаружи и не видно.

Но постепенно количество таких сайтов уменьшилось и почти сошло на нет. Почему? Потому что трудно оказалось на основе кода ЖЖ построить что-то, что не является идентичной копией ЖЖ (плюс-минус оформление). Для того, чтобы какие-то мелочи заменить, можно немного покопаться в исходниках, и все. Но предположим, вам захотелось бы сделать, чтобы комментарии шли не деревом, а линейным списком, как во многих других системах. Или ввести новую систему стилей для пользователей, чтобы у них было столь же много контроля над видом дневника, как в MySpace. Или еще что-то относительно глубокое. Для этого надо долго, долго сидеть над исходниками, разбираться; сделаться специалистом в MySQL и его репликации; изучить memcached и perlbal; перелопатить тонны перловского кода. Но для этого всего нужно столько вложить усилий, что за то же время, ну или не за то же, но за тот же порядок времени, можно было бы свою систему с нуля написать. А свою, ясно, с многих точек зрения привлекательней получается.

И это ведь не следствие, скажем, того, что мы плохо код писали. Код ЖЖ очень хорошо разбит на модули, библиотеки, итд. Хорошему программисту его легко читать и изучать. Это хороший код. Но ничего не поделаешь - его много. И ничего не поделаешь - он заточен под тот набор возможностей, которые LJ хотел дать своим пользователям. И вместе - выходит большая сложная система, которую тебе дают бесплатно, а все равно брать ее оказывается невыгодно. В результате что осталось из всех сайтов, основанных на ЖЖ? Deadjournal, GreatestJournal, и Lj.Rossia.org. Кажется, больше никого заметного и нет.

И это не какой-то особый случай, редкий. Нет, с почти любой сложной системой так обстоят дела.

Есть, наверное, исключения. Пожалуй, важность исходников больших проектов чаще заключается не в том, чтобы их использовать в другом месте, а в том, чтобы изучить их и выяснить какие-то подробности имплементации. Скажем, исходники Windows полезны тем, кто хочет найти дырки в Windows и написать вирусы; или тем, кто хочет написать эмуляцию Windows под Линуксом; но вряд ли они полезны тем, кто пишет само ядро Линукса. Исходники поисковой системы Гугла, над которыми я работаю сейчас, если бы их украли, вряд ли пригодилось кому-то для создания конкурентной поисковой системы; но тщательное их изучение могло бы принести многомиллионные прибыли какому-нибудь веб-спаммеру или SEO (Search Engine Optimizer - люди, которые за деньги стараются поднять посещения на вашем сайте из поисковых систем; я был совершенно поражен, узнав, насколько это большой бизнес). И так далее.

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

Comments:
Страница 1 из 2
<<[1] [2] >>
[User Picture]From: breqwas
2007-07-15 12:52 am
Контрпример - Mac OS X на ядре FreeBSD
Хотя это всё же чуть другое
(Ответить) (Thread)
[User Picture]From: avva
2007-07-15 12:54 am
OSX основана на BSD, не на FreeBSD.
(Ответить) (Parent) (Thread) (Развернуть)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
From: a7sharp9
2007-07-15 01:18 am
Это не беспрецедентное положение вещей. Даже авторессы женского ироничного детектива гонят собственный код вместо того, чтобы рефакторить имеющийся, хотя, казалось бы, в этом жанре вполне сошло бы и прямое копирование целыми классами и иерархиями.

Собственно, о чем говорить, если в каждом более или менее развитом приложении, написанном на C, всегда имелось по меньшей мере с десяток собственных доморощенных версий функций работы со строками (аналогов strХХХ из стандартной библиотеки). Некоторые пишут их от незнания, некоторые - от недоверия, некоторые - из тщеславия, некоторые - потому что проще написать, чем смотреть в документацию, но результат тот же самый.
(Ответить) (Thread)
[User Picture]From: breqwas
2007-07-15 01:35 am
Ну почему сразу от незнания? Скажем, если в коде приходится постоянно работать, например, с датой формата YYYYMMDD в виде числа, то вполне логично написать парочку обёрток вокруг библиотечных функций работы с датами. Хотя - да, велосипеды.
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: bazarny
2007-07-15 01:58 am
На мой взгляд, все зависит от масштаба и цели. Да, практически нет смысла брать готовый продукт и пытаться из него сделать что-то сильно от него отличающееся. С другой стороны, часто можно найти полезные идеи, которые сделают жизнь легче. Но это далеко не весь код. Возвращаясь к гугловскому коду--на самом деле весь код поиска оптимизатору не к чему, достаточно алгоритма рассчета рейтинга.
(Ответить) (Thread)
From: 9000
2007-07-15 11:10 am
А система распределённых вычислений и деплоймента ничего не стоит? %))
(Ответить) (Parent) (Thread)
[User Picture]From: msh
2007-07-15 02:07 am
Низкий уровень воровства кода связан с двумя факторами

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

2. Воровство кода очень опасно и если вскроется - то убытки перекроют прибыль многократно. Просто не стоит риска

А так, в большинстве проектов, над которыми я работал, я бы с интересом почитал код конкурентов и партнеров. При том, что вряд ли стал его использовать
(Ответить) (Thread)
(Удалённый комментарий)
[User Picture]From: nhura
2007-07-15 02:57 am
Ну теперь понятно, кто виноват в появлении вот таких скриптов
http://lj.setia.ru/threader
AVThreader
Скрипт для разворачивания комментариев в длинных тредах в ЖЖ.
(Ответить) (Thread)
[User Picture]From: dm_lihachev
2007-07-15 04:33 am

хмм... а код которого МНОГО - может быть ХОРОШИМ?

ну в смысле это к этому - "Хорошему программисту его легко читать и изучать. Это хороший код. Но ничего не поделаешь - его много."

ну вобщем код ЖЖ я читал. ну не целиком, целиком ни асилил - и как-то он мне не понравился..

ну м.б. я не являюсь Хорошим программистом? ;)


ну вобщем, судя по динамике жизни клонов ЖЖ, кол-во Хороших программистов сокращается довольно быстро (ну это понятно почему - "они не очень активны, по ряду причин, в ДЕМОГРАФИЧЕСКОМ ВОСПРОИЗВОДСТВЕ,..." - http://encyclopedia.dekanat.ru/?a=a&b=2401 ;)


м.б. там все-таки какие-то свои, архитектурные были ошибки? т.е. какие-то здоровенные конгломераты очень хорошо разбитые на модули, библиотеки, итд. - ну типа даже ЦПАНа - живут себе и не вымирают

а ЖЖ, оно да, несколько раз, когда приспичило блоги сочинять - все-таки останавливался на других вариантах, конкурирующих или самопальных
(Ответить) (Thread)
[User Picture]From: avva
2007-07-15 04:41 am

Re: хмм... а код которого МНОГО - может быть ХОРОШИМ?

Ну не знаю, какие ошибки? Как-то это туманно весьма. Насчет качества кода - о вкусах итд.

цпан и проч. подтверждают именно мой point. Самые процветающие модули цпана - небольшие, делающие какую-то конкретную работу хорошо. А огромные системы из кучи модулей вымирают, потому что оказывается слишком неудобно под них подстраиваться. Например, Mail::Box - это ж просто удавиться можно. Почитайте readme Email::Simple и зачем он вообще существует.
(Ответить) (Parent) (Thread) (Развернуть)
From: mikkim08
2007-07-15 05:13 am

Плагины

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

Видимо дело все-таки во входном барьере и в том, насколько хороша ил плоха встроенная в аппликацию система плагинов.
(Ответить) (Thread)
[User Picture]From: cmm
2007-07-15 05:25 am

Re: Плагины

есть, упрощённо говоря, три уровня сложности программистского дизайна:

- написать работающую программу

- написать пригодную для использования другими людьми библиотеку

- написать пригодный для использования другими людьми язык программирования/"фреймворк"/операционную систему

скачки сложности и цены при переходе между этими тремя уровнями нелинейные.
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: kot_ivanovich
2007-07-15 05:20 am
Это всё правильно, но некоторое воровство кода все же происходит, только в другой плоскости. Очень многие программисты, хранят (иногда зашифрованные) исходники всех проектов, над которыми они когда-либо работали, аккуратно попёртые при увольнении. Зачем? А жизнь программистская полна déjà vu. Мне дают задачу, и я вспоминаю, что N лет назад я (мой приятель Вася) делал что-то ну очень похожее... Лезем в старый код, находим, и, ну не то что прём – это обычно невозможно – но идеи используем.
(Ответить) (Thread)
From: (Anonymous)
2007-07-15 05:22 am

ne po teme

Izvinite ne po teme
menia muchaet vopros i net otveta.
Otkuda berutsa fruit flies ( ne znaiu kak po russki- vrode muxi drozofilli)
Ya prigotovil kvas - ostavil na 2 chasa otkrytim - i uzhe vezde mushki melkie eti letaiut. To zhe samoe esli ostavit' ochistki apel'sina - mushki tam budut nezamedlitel'no- dazhe zimoi.
Otkuda oni berutsa?
(Ответить) (Thread)
[User Picture]From: msh
2007-07-15 05:43 am
Но настоящее использование большой и сложной системы в другом месте, без команды, которая ее создала и поддерживает - редкое и почти невозможное явление.

Советский CS, например ЕС ЭВМ
(Ответить) (Thread)
[User Picture]From: cmm
2007-07-15 07:41 am

теперь ясно, на чём именно Советский Союз надорвался.
(Ответить) (Parent) (Thread)
[User Picture]From: sleeping_death
2007-07-15 06:57 am
имхо, вопрос немного в другом: насколько изначально проект ориентируется на то, что будет использован кем-то на стороне.
Ну и потом, самое очевидное - это вопрос инвестиций и интеллекта. Какие деньги надо заплатить специалистам какого уровня (минимум - не ниже уровня тех, кто систему писал), чтобы они смогли полностью в ней разобраться за короткий промежуток (допустим, половину времени, потраченного на создание своей аналогичной системы).
(Ответить) (Thread)
From: ex_simanyay
2007-07-15 07:19 am
Согласен.

Не далее, чем вчера, смотря техтолк «How to design a good API and why it's matters» как раз думал над тем, что гораздо полезнее выпускать с исходниками библиотеки и фреймворки, чем большие, готовые проекты (особенно веб-бейзд).

Мне когда-то очень пригодился исходник libgaim, но мне абсолютно до фонаря код Adium X. Также, как код Ruby on Rails гораздо полезнее исходника, скажем, Basecamp (если вдруг его откроют). И т. д.
(Ответить) (Thread)
From: 9000
2007-07-15 11:23 am
Модуляризация рулит.

Думаю, код обработчиков протоколов из miranda тоже может быть полезен, поскольку он ещё более модульный.

А хорошие фреймворки нередко целиком составлены из готовых, прежде существовавших компонентов -- пример тому pylons :)
(Ответить) (Parent) (Thread)
From: mikkim08
2007-07-15 07:24 am
Интересно было бы порассуждать, а _как_ должна быть построена система, чтобы она позволяла отчуждение, развитие, кастомизацию, а также построение на ее основе новых отличных от оригинальной систем, без участия оригинальной команды.

Таких программ довольно много (хотя можно спорить об уровне их сложности, способности к развитию/кастомизации и т.п.)

Кстати вот еще пример - Unix. Исходники которого можно было в принципе прочесть за пару-тройку вечеров.

У Steve Yegge было такое рассуждение про "хорошие" системы (система включает язык или plugi-in system для наращивания, должна быть интроспективна, в системе должен быть command shell и т.д.), но как-то я с ним не на 100% согласен.
(Ответить) (Thread)
[User Picture]From: vvagr
2007-07-15 08:13 am
объём воровства несвободного кода оценить практически невозможно.

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

почему код жж не стал основой большого опенсорсного проекта блогодвижка - вопрос очень интересный, разумеется.
(Ответить) (Thread)
[User Picture]From: trurle
2007-07-22 07:03 pm

Перловая каша

вопрос очень интересный, разумеется.
Вопрос интересный, а ответ очевидный.
Perl is write-only language.
(Ответить) (Parent) (Thread) (Развернуть)
Страница 1 из 2
<<[1] [2] >>