об исходниках
Jul. 14th, 2007 05:18 pmО ценности исходников вне конкретного проекта:
Верно подмечено, и мне приходилось об этом не раз задумываться.
Вот взять например код ЖЖ, над которым я работал почти три года. Все это время он был open-source. Любой мог взять его, построить свой клон ЖЖ, причем LiveJournal.com это не просто приветствовал, а еще и помогал советами, подсказывал, где что починить, если не работало, итд.
Казалось бы, готовая система для блог-сайта, с комментариями, с френдлентами, весь код уже написан, все работает. Бери и делай что хочешь: вставляй в свой сайт, меняй на свой вкус, добавляй новые возможности. И какое-то время многие пытались! Где-то в конце 2001 и на протяжении 2002 было довольно много сайтов и проектов, основанных на коде ЖЖ, судя по тому, сколько людей к нам обращались за советами и предложениями. Довольно много - больше десятка, скажем. И это те, о которых мы знали, ведь никто не обязан доложиться, а если сайт внутрикорпоративный, так его снаружи и не видно.
Но постепенно количество таких сайтов уменьшилось и почти сошло на нет. Почему? Потому что трудно оказалось на основе кода ЖЖ построить что-то, что не является идентичной копией ЖЖ (плюс-минус оформление). Для того, чтобы какие-то мелочи заменить, можно немного покопаться в исходниках, и все. Но предположим, вам захотелось бы сделать, чтобы комментарии шли не деревом, а линейным списком, как во многих других системах. Или ввести новую систему стилей для пользователей, чтобы у них было столь же много контроля над видом дневника, как в MySpace. Или еще что-то относительно глубокое. Для этого надо долго, долго сидеть над исходниками, разбираться; сделаться специалистом в MySQL и его репликации; изучить memcached и perlbal; перелопатить тонны перловского кода. Но для этого всего нужно столько вложить усилий, что за то же время, ну или не за то же, но за тот же порядок времени, можно было бы свою систему с нуля написать. А свою, ясно, с многих точек зрения привлекательней получается.
И это ведь не следствие, скажем, того, что мы плохо код писали. Код ЖЖ очень хорошо разбит на модули, библиотеки, итд. Хорошему программисту его легко читать и изучать. Это хороший код. Но ничего не поделаешь - его много. И ничего не поделаешь - он заточен под тот набор возможностей, которые LJ хотел дать своим пользователям. И вместе - выходит большая сложная система, которую тебе дают бесплатно, а все равно брать ее оказывается невыгодно. В результате что осталось из всех сайтов, основанных на ЖЖ? Deadjournal, GreatestJournal, и Lj.Rossia.org. Кажется, больше никого заметного и нет.
И это не какой-то особый случай, редкий. Нет, с почти любой сложной системой так обстоят дела.
Есть, наверное, исключения. Пожалуй, важность исходников больших проектов чаще заключается не в том, чтобы их использовать в другом месте, а в том, чтобы изучить их и выяснить какие-то подробности имплементации. Скажем, исходники Windows полезны тем, кто хочет найти дырки в Windows и написать вирусы; или тем, кто хочет написать эмуляцию Windows под Линуксом; но вряд ли они полезны тем, кто пишет само ядро Линукса. Исходники поисковой системы Гугла, над которыми я работаю сейчас, если бы их украли, вряд ли пригодилось кому-то для создания конкурентной поисковой системы; но тщательное их изучение могло бы принести многомиллионные прибыли какому-нибудь веб-спаммеру или SEO (Search Engine Optimizer - люди, которые за деньги стараются поднять посещения на вашем сайте из поисковых систем; я был совершенно поражен, узнав, насколько это большой бизнес). И так далее.
Но настоящее использование большой и сложной системы в другом месте, без команды, которая ее создала и поддерживает - редкое и почти невозможное явление.
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 - люди, которые за деньги стараются поднять посещения на вашем сайте из поисковых систем; я был совершенно поражен, узнав, насколько это большой бизнес). И так далее.
Но настоящее использование большой и сложной системы в другом месте, без команды, которая ее создала и поддерживает - редкое и почти невозможное явление.
no subject
Date: 2007-07-15 12:52 am (UTC)Хотя это всё же чуть другое
no subject
Date: 2007-07-15 12:54 am (UTC)(no subject)
From:freebsd!
From:Re: freebsd!
From:(no subject)
From:(no subject)
From:no subject
Date: 2007-07-15 01:04 am (UTC)(например, верхний реестр "istanbul" будет "ISTANBUL" везде, кроме Турции и Азербайджана, где он будет "İSTANBUL")
no subject
Date: 2007-07-15 01:15 am (UTC)По теме: дело в том, что любой коммерческий продукт - это не только и не столько исходники, сколько пользователи + инфраструктура.
Вот сейчас Гугл бьется в Китае и России за долю рынка. И практически бестолку. Поможет ему знание исходников Яндекса? А ни фига. В принципе, он и сам ищет не хуже.
Кроме того, любой продукт нужно держать "в тонусе". Это требует не только рабочей команды, но и больших финансовых затрат.
(no subject)
From: (Anonymous) - Date: 2007-07-15 08:28 am (UTC) - Expand(no subject)
From:(no subject)
From:(no subject)
From: (Anonymous) - Date: 2007-07-15 06:13 pm (UTC) - Expand(no subject)
From:(no subject)
From: (Anonymous) - Date: 2007-07-15 08:43 pm (UTC) - Expand(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From: (Anonymous) - Date: 2007-07-15 08:52 pm (UTC) - Expand(no subject)
From:no subject
Date: 2007-07-15 01:18 am (UTC)Собственно, о чем говорить, если в каждом более или менее развитом приложении, написанном на C, всегда имелось по меньшей мере с десяток собственных доморощенных версий функций работы со строками (аналогов strХХХ из стандартной библиотеки). Некоторые пишут их от незнания, некоторые - от недоверия, некоторые - из тщеславия, некоторые - потому что проще написать, чем смотреть в документацию, но результат тот же самый.
no subject
Date: 2007-07-15 01:35 am (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2007-07-15 01:58 am (UTC)no subject
Date: 2007-07-15 11:10 am (UTC)no subject
Date: 2007-07-15 02:07 am (UTC)1. Подавляющее большинство кода пишут в странах, где люди с университетским образованием вообще очень редко воруют. В тех районах, где они живут можно оставлять открытые машины и посылки на крыльце. В крайнем случае они могут скачать фильм с торрента, но потому что искренне не считают это воровством
2. Воровство кода очень опасно и если вскроется - то убытки перекроют прибыль многократно. Просто не стоит риска
А так, в большинстве проектов, над которыми я работал, я бы с интересом почитал код конкурентов и партнеров. При том, что вряд ли стал его использовать
no subject
Date: 2007-07-15 02:54 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2007-07-15 02:57 am (UTC)http://lj.setia.ru/threader
AVThreader
Скрипт для разворачивания комментариев в длинных тредах в ЖЖ.
хмм... а код которого МНОГО - может быть ХОРОШИМ?
Date: 2007-07-15 04:33 am (UTC)ну вобщем код ЖЖ я читал. ну не целиком, целиком ни асилил - и как-то он мне не понравился..
ну м.б. я не являюсь Хорошим программистом? ;)
ну вобщем, судя по динамике жизни клонов ЖЖ, кол-во Хороших программистов сокращается довольно быстро (ну это понятно почему - "они не очень активны, по ряду причин, в ДЕМОГРАФИЧЕСКОМ ВОСПРОИЗВОДСТВЕ,..." - http://encyclopedia.dekanat.ru/?a=a&b=2401 ;)
м.б. там все-таки какие-то свои, архитектурные были ошибки? т.е. какие-то здоровенные конгломераты очень хорошо разбитые на модули, библиотеки, итд. - ну типа даже ЦПАНа - живут себе и не вымирают
а ЖЖ, оно да, несколько раз, когда приспичило блоги сочинять - все-таки останавливался на других вариантах, конкурирующих или самопальных
Re: хмм... а код которого МНОГО - может быть ХОРОШИМ?
Date: 2007-07-15 04:41 am (UTC)цпан и проч. подтверждают именно мой point. Самые процветающие модули цпана - небольшие, делающие какую-то конкретную работу хорошо. А огромные системы из кучи модулей вымирают, потому что оказывается слишком неудобно под них подстраиваться. Например, Mail::Box - это ж просто удавиться можно. Почитайте readme Email::Simple и зачем он вообще существует.
ну этт -- у меня мораторий на натужение головы по воскре
From:итого
From:Re: итого
From:Re: хмм... а код которого МНОГО - может быть ХОРОШИМ?
From: (Anonymous) - Date: 2007-07-19 04:50 am (UTC) - ExpandПлагины
Date: 2007-07-15 05:13 am (UTC)Видимо дело все-таки во входном барьере и в том, насколько хороша ил плоха встроенная в аппликацию система плагинов.
Re: Плагины
Date: 2007-07-15 05:25 am (UTC)- написать работающую программу
- написать пригодную для использования другими людьми библиотеку
- написать пригодный для использования другими людьми язык программирования/"фреймворк"/операционную систему
скачки сложности и цены при переходе между этими тремя уровнями нелинейные.
Re: Плагины
From:Re: Плагины
From:Re: Плагины
From:Re: Плагины
From:Re: Плагины
From:Re: Плагины
From:Re: Плагины
From:Re: Плагины
From:Re: Плагины
From:Re: Плагины
From:Re: Плагины
From:no subject
Date: 2007-07-15 05:20 am (UTC)ne po teme
Date: 2007-07-15 05:22 am (UTC)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?
no subject
Date: 2007-07-15 05:43 am (UTC)Советский CS, например ЕС ЭВМ
no subject
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2007-07-15 06:57 am (UTC)Ну и потом, самое очевидное - это вопрос инвестиций и интеллекта. Какие деньги надо заплатить специалистам какого уровня (минимум - не ниже уровня тех, кто систему писал), чтобы они смогли полностью в ней разобраться за короткий промежуток (допустим, половину времени, потраченного на создание своей аналогичной системы).
no subject
Date: 2007-07-15 07:19 am (UTC)Не далее, чем вчера, смотря техтолк «How to design a good API and why it's matters» как раз думал над тем, что гораздо полезнее выпускать с исходниками библиотеки и фреймворки, чем большие, готовые проекты (особенно веб-бейзд).
Мне когда-то очень пригодился исходник libgaim, но мне абсолютно до фонаря код Adium X. Также, как код Ruby on Rails гораздо полезнее исходника, скажем, Basecamp (если вдруг его откроют). И т. д.
no subject
Date: 2007-07-15 11:23 am (UTC)Думаю, код обработчиков протоколов из miranda тоже может быть полезен, поскольку он ещё более модульный.
А хорошие фреймворки нередко целиком составлены из готовых, прежде существовавших компонентов -- пример тому pylons :)
no subject
Date: 2007-07-15 07:24 am (UTC)Таких программ довольно много (хотя можно спорить об уровне их сложности, способности к развитию/кастомизации и т.п.)
Кстати вот еще пример - Unix (http://vak.ru/doku.php/unix-history/unix-v6). Исходники которого можно было в принципе прочесть за пару-тройку вечеров.
У Steve Yegge было (http://steve-yegge.blogspot.com/2007/01/pinocchio-problem.html) такое рассуждение про "хорошие" системы (система включает язык или plugi-in system для наращивания, должна быть интроспективна, в системе должен быть command shell и т.д.), но как-то я с ним не на 100% согласен.
no subject
Date: 2007-07-15 08:13 am (UTC)а про использование открытого кода - ваше утверждение тавтологично. если код используется - это "тот же проект". если написан новый - "другой проект". как показывает опенсорсный мир, проекты бывают очень большими, с форками, и с обратным заходом в проприетарку даже, если лицензия позволяет.
почему код жж не стал основой большого опенсорсного проекта блогодвижка - вопрос очень интересный, разумеется.
Перловая каша
Date: 2007-07-22 07:03 pm (UTC)Вопрос интересный, а ответ очевидный.
Perl is write-only language.
Re: Перловая каша
From:no subject
Date: 2007-07-15 08:26 am (UTC)Интересно то, что упомянутое Вами явление, похоже, не зависит от качества кода. UE3, судя по словам тех, кто его "щупал", ужасен, но используется "на ура" десятками команд. Несмотря на свою совершенно чудовщиную стоимость.
no subject
Date: 2007-07-15 11:30 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2007-07-15 09:27 am (UTC)Как в известном анекдоте про верблюдов - Ну и зачем нам все эти навороты в зоопарке !?
оффтоп
Date: 2007-07-15 10:26 am (UTC)no subject
Date: 2007-07-15 10:50 am (UTC)А вообще, это, по-моему, здорово, что есть столько открытого кода, и можно посмотреть и узнать, "а как они это сделали?".
no subject
Date: 2007-07-15 12:26 pm (UTC)Однако, их как правило не поддерживает один человек. Соответсвенно, отпадает нужда в одном универсальном сверх-специалисте. То есть, кто-то будет хорошо знать MySQL, кто-то Perl или C++ - так создается команда "комплиментарных профессионалов"... Точно так же отдельный человек специализируется в конкретном модуле системы, при этом зная остальные части лишь в общем, необходимом для интеграции виде.
Когда код хорошо разбит на модули и библиотеки - практически всегда можно вынести тот общий знаменатель для следуещого поколения продукта... "Можно" не означает "тривиально", но собственно reusability - наверное, одна из главных objectives такой специальности, как Software Engineering.
Новичкам в освоении кода должны помочь такие вещи, как комментирование и документация, которыми - жаль - часто пренебрегают. Кроме того, для ориентирования в чужом коде очень хорошо помогает отладчик, наличие в системе лога, а также на первый взгляд банальный поиск по правильно подобранным ключевым словам.
Касательно не-использования существуещого кода, мы забыли один фактор: программисту чаще куда приятней "ваять" свой код, чем копаться и разбираться в чужом. Отсюда, команда сознательно или не-сознательно попытается настоять на том, чтобы зарубить код старый, и найдет для этого тысячу реальных и надуманных причин.:)
no subject
Date: 2007-07-15 09:01 pm (UTC)Наш продукт. Сильно изменённый FreeBSD + свой код примерно сопоставимого объёма поверх.
Ни одного разработчика FreeBSD в команде нет.
Что там в случае ЖЖ - х.з.
Может нашли что-то удобнее?
no subject
Date: 2007-07-15 09:19 pm (UTC)Что-то известное?
(no subject)
From:(no subject)
From: (Anonymous) - Date: 2007-07-18 07:49 am (UTC) - Expand(no subject)
From: (Anonymous) - Date: 2007-07-18 07:57 am (UTC) - Expand(no subject)
From:(no subject)
From:(no subject)
From: (Anonymous) - Date: 2007-07-15 09:23 pm (UTC) - Expandno subject
Date: 2007-07-15 11:03 pm (UTC)no subject
Date: 2007-07-16 07:54 am (UTC)Но в целом проблема известная - разработчики кода с открытыми исходниками очень часто уделают недостаточно внимания документированию архитектуры разрабатываемогого проекта.
Но везде есть свои исключения - например код гцц успешно используется Эппл и Нокия, уже упомянутый выше Эклипс кем только не используется.Ну и бум домашних раутеров показывает что код ядра линукса тоже хорошо используется сторонними разработчиками.
Приподнимем занавес за краешек
Date: 2007-07-17 01:15 am (UTC)Раз вы разрабатывали ЖЖ, значит вы наверняка сможете мне объяснить, почему он так странно работает со временем. Вот у меня во френд-ленте есть люди и из Москвы, и из Нью-Йорка. Когда после 16:00 монреальского времени в Москве наступает следующий день, то в ленте появляется отбивка с завтрашней датой. Потом кто-то постит в Нью-Йорке, и снова появляется отбивка с датой, которая возвращает меня в сегодня. И так может продолжаться очень долго. Спрашивается, зачем тогда вообще в profile я указал свой timezone?
С другой стороны, в заголовке любого комментария прописаны полностью дата и время в UTC, но для того чтобы они пересчитались в локальное время нужно обязательно логинться? Неужели после логина Windows перестроит свои настройки timezone в соответствии с ЖЖшными?
Короче, или я чего-то не додумал, или вы там что-то перемудрили.
no subject
Date: 2007-07-18 07:47 am (UTC)