…и о посредственности

Упомянутый баг-близнец состоит в непонятном поведении системы после системного вызова. Формально это разное с вызовом таки опциональной библиотеки имени DirectX; но практически еще противнее.

Титаническое отличие заключается в возможностях борьбы.

Тот системный вызов (конкретно mlock()) чешется под Linux-ом. Поэтому даже если внимательное чтение документации и эксперименты с кодом насчет workarounds ни к чему не приведут, всегда есть последнее средство – взять исходники и самостоятельно разобраться, что же происходит.

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

Отсюда немедленно появляется риторический вопрос – кому нужен, а кому не нужен open-source?

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

В теории исходники могут пригодиться конкурирующим фирмам. На практике процент “прорывного” кода, обладанием исходным текстом которого натурально приносит преимущество, уверенно стремится к нулю – игрострой не исключение. Мне не нужно примерно 99% вашего кода, интегрировать его я буду дольше, чем писать свой. Кстати, вы до сих пор думаете, что в вашей игре есть какие-то невероятные ноу-хау? Займитесь туристическим бизнесом. Ваш благословенный город – в который до сих пор не завезли ни Citeseer, ни Google – будет популярным местом отдыха уставших IT-шников.

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

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

Итого две особо наглядные категории лиц, которым реально не до лампады наличие исходников, это достаточно грамотные программисты во-1х… и CTO/CEO во-2х. Первые могут с ними что-то сделать. Вторые тупо снижают риски vendor lock-in.

Вопрос про open-source в общем и целом, понятно, крайне спорный; в случае с платными продуктами и высокой конкуренцией так и особенно. Механизмов для уверенного опознания кода или “идей” по бинарникам человечество пока не придумало. Через это экономический эффект скорее отрицательный, вполне разумно ничего не отдавать.

Однако драйвера и DirectX, очередной инцидент с которыми собственно и спровоцировал меня на писанину, уже раздаются бесплатно. С кем “конкурирует” DX, понимаю очень слабо. Равно как и про “trade-secrets” в драйверах от обоих толстых вендоров. Железо у них таки несколько разное, а наличие спецчитов для 3DMark и популярных игр и так уже давно не секрет!

Evil corporate policies and IP licensing issues aside, поставим вопрос: а какими качествами должен обладать разработчик, открывающий свой код?

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

95% контингента п.Земля составляют, как известно, те самые посредственности. Открыть свой говнокод всему миру для них – непосильная психическая нагрузка; это очень страшно, потому что очень стыдно. Поэтому и не смыла до сих пор, и – ставлю доллар – окончательно не смоет никогда. Отчасти поэтому очень редкие, но очень увлекательные баги в драйверах и DX из первой серии будут по-прежнему висеть дамокловым мечом.

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

Предположим невозможное: что пиратство, корпоративные политики и прочие вопросы лицензирования интеллектуальной собственности на денек исчезли. Откроете ли вы свой код?

Кармак, заметьте, не зассал.

  • CEMEH

    Все же это к драйверам гораздо в большей степени относится, чем к DX Runtime. Количество багов в рантайме несравнимо с багами драйверов, и чем дальше тем он тоньше.
    А драйвера отдавать в опенсурс думаю IHV таки сцут о конкурентах. Типа, слишком многое о видеокарте можно узнать слишком рано.

  • shodan

    > Количество багов в рантайме несравнимо с багами драйверов,

    Сравнимо вполне, там и там единицы.
    Одна отрада, что суммарно количество небольшое.

    Те. есть неплохой очень шанс проскочить и мимо багов.
    Но если уж укусит, то от души.

    > А драйвера отдавать в опенсурс думаю IHV таки сцут о конкурентах.
    > Типа, слишком многое о видеокарте можно узнать слишком рано.

    Ну и что сделают конкуренты, узнав?
    В спешном порядке переделают силикон, что ли?

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

  • CEMEH

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

    Могут что-то изменить в будущих версиях, разрыв в год в выходе на рынок поколения вполне бывает. Лучше узнать токности инжеренерных решений, проблематика-то очень похожая.
    Про дизасм – пойнт конечно есть, но есть подозрение что они от этого там защищаются, теряя еще перформанса. Хотя наверноя знать было бы интересно. Кто-то пытался дизасмить драйвера видеокарт 4 fun? :)

  • look4awhile

    я пытался. во сне разумеется.
    мне приснилось, что там obfuscation layer, для детей.
    и что я его через неделю отковырял, до нужного уровня.
    снилось мне, что интересовал меня не layer, а формат push-buffer-а
    и он отдуа выковыривался просто влёт
    до тех пор, разумеется, пока под OpenGL не стали зачем-то писать D3D теги
    вот такой странный сон

  • look4awhile

    ну и ещё один момент – вдогонку
    оставшиеся 5% на говнокод эммоционально не реагируют – они к нему более чем привычные

  • IronPeter

    Про дизасм драйверов. Не думаю, что людям c ff интересно, но отпишусь.

    Есть такой проект – опенсорсные драйверы для NV. Базируются на древнем 2D драйвере, который был по неосторожности открыт.

    http://nouveau.freedesktop.org/wiki/

    О том как ломали:

    http://mirror.linux.org.au/pub/linux.conf.au/2007/video/talks/154.pdf

    Ничего сложного – ребята составляли базу данных push buffers. Насколько я понимаю – просто в цикле крутили разные установки OpenGL stages, потом смотрели, какие теги в push buffer поменялись.

    для ценителей прекрасного без NDA от NV:

    http://nouveau.cvs.sourceforge.net/nouveau/nv40_demo/main.c?revision=1.5&view=markup

    расхаченный формат pb. Видны забавности – например, как коды шейдеров эмбедятся прямо в тело pb.

    Руслан как-то говорил, что последние драйверы от NV вообще открыты. Я не смог поймать его за пуговицу и заставить ткнуть пальцем. В гугле ничего не нашел.

  • IronPeter

    В той же pdf видна методология расследования.

    Надо оттрасировать ядерное memory mapped IO. Читай – доступ к отмапленным регистрам видеокарты. Ребята взяли и написали заглушку для ioremap. Которая выдает свою память-stub, по pagefalut ловит все обращения, перенаправляет их уже куда надо. Логирует. Естественно, в Линукс.

    Этот коммент уже ближе к исходному посту Шодана.

  • shodan

    > таки из драйверов и железа примеров больше.

    Посчитай внимательно.
    Я упомянул примерно по 3 проблемы на вендора и примерно 2 в самом DX.
    Суммарно всяко больше; по каждой отдельной железке “так же”

  • feodor

    Врядли в вопросе открытия кода “зассал” играет хоть какую-то роль.

  • shodan

    > Врядли в вопросе открытия кода “зассал” играет хоть какую-то роль.

    А предыдущую фразу прочитать?

  • http://_gvozdoder_.livejournal.com gvozdoder

    Похоже, процесс открытия пошел…
    http://airlied.livejournal.com/50613.html

  • Dmitry Tyurev

    > и прочие вопросы лицензирования интеллектуальной собственности на денек исчезли.
    > Откроете ли вы свой код?

    О каком коде идёт речь? Проектов целиком? Отдельных либ?

  • shodan

    > О каком коде идёт речь? Проектов целиком? Отдельных либ?

    Непринципиально.

  • pvtSuhov

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