ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
26 апреля
158014
Evgeny_CD, Архитектор (31.05.2009 22:59, просмотров: 37129)
Тайна Linux'а частично разгадана: жрецы 21 века. Давным давно, когда Керниган и Ричи были молоды, текстовый файл на языке С был тем, что скармливали С компилеру, и на выходе появлялся объектник. И любой человек, хорошо знающий С, мог восстановить смысл программы из ее исходника на С. Понять, как она работет. И прохачить, если надо. Прошли годы. Жизнь стала сложнее, и исходники на С - тоже :) Если внимательно посмотеть на исходники Linux, FreeBSD, RTEMS, eCos (тут это вообще доведено до совершенства) - то можно понять, что это есть не что иное, как стеганография :) Рассмотрим "простенький" макрос из книги Embedded Linux Primer: A Practical, Real-World Approach. раздел 5.3. Kernel Command Line Processing (спасибо за наводку AlexandrY): #define __setup_param(str, unique_id, fn, early) \ static char __setup_str_##unique_id[] __initdata = str; \ static struct obs_kernel_param __setup_##unique_id \ __attribute_used__ \ __attribute__((__section__(".init.setup"))) \ __attribute__((aligned((sizeof(long))))) \ = { __setup_str_##unique_id, fn, early } #define __setup_null_param(str, unique_id) \ __setup_param(str, unique_id, NULL, 0) #define __setup(str, fn\ __setup_param(str, fn, fn, 0) Формально все корретно. Любой С89 компилер обязан это схавать, и все будет ок. Но Вы многое поняли из этого куска кода? Конечно, напрягая мозги, Вы за некоторое время разберетесь с этим __setup_param, но тут подоспеет еще что-то в этом же духе. И через некоторое время Вы поймете, что весь код ядра Вы понять не можете. Физически. Хотя он невелик - менее 1М кода (когда-то ковырялся из любопытства с ядром 2.4 - собственно, сам ядро было что-то типа 400к в сумме, примерно как uCOS со всеми наворотами). Поняли кусочек, что-то сделали готовым инструментарием - и вот и хорошо. Возьмите с полки пирожок :) Но это мелочи. Ведь к таким добрым макросам можно добавить душевную обработку исходников автотулзами с замечательным языком m4, и тогда, чтобы понять смысл какой-то строчки кода, Вам надо будет держать в голове КУЧУ файлов, написанных в разных стилях: m4, ac, make, h, c. Те, кто это умеют делать - избранные :) Это равносильно хождению по воде, умению вести рукопашный бой в стиле Нео и пр. А дальше возникает очень интересная конструкция. Чтобы собрать что-то в GNU стиле, нужно иметь под рукой целую кучу тулзов, которые... правильно, живут только в мире GNU :) И если Вы просто так возьмете сложный исходник GNU стиля, и начнете его скармливать любому нормальному С компилеру (но без m4 и автотулзов)... через некоторое время Вас уволят с работы, ибо бесконечных проектов никто из менеджеров не любит (и это правильно!). Почему тулзы живут только в мире GNU? Да потому, что любой нормальный человек, знакомый с технологиями разработки ПО начала 21 века, посмотрев на этот антиквариат, скажет - вы чё, охренели? И нафига ЭТО портировать в мою ОСь? Примерно тоже скажет современный военный, если ему предложат вооружить его подразделение катанами. Далее начинается голая эзотерика. Вот есть пулемет. Хорошее средство решения проблемы перенаселенности отдельных территорий. Есть катана. Совершенно некудышее военное средство по нынешним временам. Но! Длительные (годы полного уединения) упражнения с катаной дают человек нечто, чего он не может получить, выкосив деревню-другую из пулемета. И после этих упражений человек едва ли будет выкашивать деревни из пулемета. Когда человек (или организация) попадают в мир Linux, они не могут просто так взять все преимущества этого мира и утащить их оттуда. Фокус в том, что преимущества можно использовать только внутри мира. И когда человек начинает решать свои задачи, то он неизбежно усиливает могущество мира Linux. Потому что это "свое" он не сможет утащить "наружу", в силу GNU "свое" опосредованно станет доступно всему сообществу. Вы можете закрыть свои исходники - но это ничего не изменит. Если они собираются всми этими автотулзами - Вы все равно не утащите их за пределы мира Linux. А если они живут без автотулзов - вероятно, это какое-то простенькое приложение. Ну и хрен с Вами - тащите его в Win32 - от мира Linux не убудет. Теперь на время обратимся к проблеме Нео. Т.е. находится чувак, который может разобратья в исходниках. Со всеми m4, ac и пр. * такие чуваки редки. Появления избранного ждут из поколения в поколение :) * такие чуваки неизбежно достигли высокого уровня просветления. Они не будут выкашивать деревни. Они осознают, что они делают. В общем, они не опасны для мира. Хотя... * ничто не вечно под луной. Рано или поздно придет таки Нео, который все изменит. Иначе и быть не может. Иначе жизнь остановится, а это смерть. И на обломках GNU Linux вырастет что-то новое. Как сейчас мы смотрим на развалины древнегреческих городов, используя в повседневной практике законы, открытые древнегреческими учеными, и не паримся по этому поводу. В чем рецепт жизнеспособности Линуха? * всякое действие, совершенное внутри мира Linux, повышает могущество мира * новички, которые потенциально опасны (как канал учетки халявы из мира Linux в другие миры), на практике безопасны - они не понимают основы мира, не владеют всеми практиками. И ничего важного утащить не могут. * если ты познал основы мира Linux, ты стал его частью. Ты будешь разрушать свой мир? Очень хорошая, устойчивая конструкция. Юный каратист, познавший пару приемов, не шибко опасен для общества. Мастер не будет отбирать кошельки у прохожих. Исключения бывают, но редко. Неотъемлемой частью мира Linux является стеганография, описанная выше. Как нетрудно понять, нормального порта тулзов мира GNU под другие платформы не будет никогда. Ибо это никому не нужно. Миру других платформ это крайне вредно. Миру GNU - тоже. Некоторый прогресс в портировании части наработанного в мире GNU под Win32 - это не боле чем следствие колоссальной распространенности Win32. За счет большой базы даже маловероятные явления могут достигать заметных абсолютных величин - теорвер, однако. Как видим, весь этот "мир свободного софта" - не что иное, как религия. Оно так само получилось, или так задумали - не важно. Стеганография - часть любой религии. Это ее отличительная черта. Т.е. есть какое-то учение. Написанное понятным адептам языком. Они его заучивают, оно становится частью их мышления. Далее начинается селекция избранных. Которые осознали, что же они заучили. Нашли новое измерение. Далее - избранные высокого передела. Которые нашли еще больше измерений. Ядро линуха не напоминает? :) Но ничто не вечно :) Достаточно широко внедрить в GNU использование тулзов на питоне :), как барьеры между мирами начнут стремительно уменьшаться. По большому счету, достаточно сделать питоновские аналоги автотулзов, совместимые по входным форматам файлов, ибо GCC уже портирова подо все. Но такми вещами надо заниматься аккуратно. Не зря Scons не совместим с make по формату файлов :). Ибо случаи всякие бывают. И машины в пропасти срываются сами по себе. В нужный момент :) Я уверен, что число Нео, которые осознали линух и создали тулзы для анализа кода, точно ненулевое. Но в силу всего описанного выше они не выкладывают это в public. Иначе толпа ламеров все разнесет к чертям - и что такой Мастер будет делать после? Только одно - станет частью толпы. Но тогда он перестанет быть Мастером. Последнее уравнение сложилось :)