Программисты и культурные войны, а также проблема гейткипингаНа данном видео один из контрибьюторов Linux Kernel (LK) срывающимся голосом возражает спикерам конференции: «Вы не заставите нас всех учить Rust!». Этот случай является одним из множества примеров острой политической реакции на внедрение современного и безопасного языка в крайне консервативную среду.Есть очень частый аргумент в среде программистов, что язык — это просто инструмент, и программирование должно быть «вне политики». Этот тезис не просто ложный, но и одновременно обскурантистский, так как под собой он скрывает всю культуру программирования, напрямую связанную с политикой.В мире разработки существует множество субкультур: вокруг каждого языка выстраивается культурное поле со своими ритуалами, жаргоном и ценностями. Но я хочу сконцентрироваться именно на одной, крайне консервативной субкультуре, которая фигурирует в этом видео: «системный хардкордный Си-программист». Так сложилось, что культура вокруг системного программирования тяготеет к элитизму и консерватизму. Даже такие прогрессивные (в плане отношения к технологиям) и хорошие ребята вроде Tsoding позволяют себе элитистские шутки, что неизбежно концентрирует вокруг них особый тип людей.Безусловно, в сообществе Linux Kernel есть подобные проблемы. Но помимо нее есть и еще более опасная проблема — гейткипинг. Ни для кого не секрет, что одной из причин появления Rust в LK стало опасение Линуса Торвальдса за то, что новых контрибьюторов, способных писать системный код на Си, становится все меньше и меньше. Будущее проекта требует новых, молодых людей, способных обеспечить развитие ядра. Подготовка нового контрибьютора — это крайне сложная вещь, и LK имеет объективную проблему: плохо задокументированные API.Исторически сложилось так, что писать документацию программисты не очень любят, и обычно это откладывается «на потом». Из-за этого понять, как работают некоторые API в LK, невозможно без внимательного и долгого чтения исходного кода.Rust решает эту проблему: все нюансы работы API кодируются через его мощную систему строгой типизации. Если раньше в Си API вам надо было курить сорцы, то на Rust достаточно начать писать код, и компилятор сам подскажет, какой тип данных нужно обработать, где учесть невалидные значения и все в таком духе (кто писал на Rust сразу поймут, о чем идет речь).Но этот аргумент, наряду с аргументом про безопасность Rust в сравнении с Си, перестает работать ровно в тот момент, когда в процесс принятия решений вмешивается мощная идеология, наличие которой постоянно отрицается. Поймите меня правильно: проблема не в наличии идеологии как таковой (она есть у всех), а в отрицании ее наличия.Отсюда мы и получаем небылицы от «тру-программистов» о том, что «просто нужно уметь работать с памятью, чтобы код на Си был безопасным». И никакие эмпирические данные, раз за разом подтверждающие, что даже самые лучшие программисты не могут писать безопасный код на Си, не могут переубедить «тру-программистов».Так проекты попадают в идеологические ловушки, где консервативные настроения вступают в острую конфронтацию с теми, кто предлагает изменения. Ярые отрицатели «политики» вступают в настоящую политическую борьбу, сами не понимая, что больше всего политики производят как раз-таки они.Почему же так получается? Потому что Linux Kernel — это не про «мы просто пишем код на Си». Это про совместную разработку, про принятие решений, про выбор технологий, про взаимодействие с другими людьми, про свою культуру и эстетику — то есть про политику. Технологии не существуют в вакууме, в особенности когда они обслуживают весь мир.Внедрение Rust в Linux Kernel — это, в первую очередь, внедрение новых ценностей. Поэтому подвожу вас к очень простой, но возможно неприятной мысли: ценности — это не какая-то непоколебимая вещь, которую нужно всячески защищать. Ценности нужно постоянно соотносить с вашими целями, и если они перестают работать или появляется что-то, что работает лучше, не нужно бояться их менять. Ценности — это и есть настоящий инструмент, и он политичен.