И здесь мы подходим к личности автора, талантливого и суперпродуктивного программиста Марка Руссиновича. Он показал, что один умный парень способен интеллектуально продавить мегакорпорацию. И той придётся заплатить ему огромные деньги, и даже взять на работу. Потому что повторить его программы она не сумела…
Среди величайших программистов современности Марк Руссинович отличается тем, что у него великолепное образование и степень PhD. На самом деле это редкость, поскольку у половины гениальных разработчиков вообще нет высшего образования, а тем более степени. А вот он до 27-ми лет грыз гранит науки, только потом начал работать…
После десяти лет изучения компьютерных наук в университете Карнеги–Меллона Марк Руссинович пару лет поработал разработчиком в нескольких маленьких компаниях. Затем обстоятельства созрели, чтобы запустить собственную компанию. Обстоятельства следующие:
- Вышла мегапопулярная ОС Windows 95/NT, её ставили практически на всех новых компьютерах (маки тогда были в крайнем упадке).
- Появился общедоступный интернет, что открывает возможность для распространения софта в мировом масштабе, в том числе по модели shareware.
Шаровары
В 1996 году они вместе с Брайсом Когсвеллом соучредили компанию Winternals Software, где Руссинович занимал должность главного архитектора программного обеспечения. Одновременно был запущен сайт sysinternals.com (поначалу ntinternals.com), на котором напарники написали и опубликовали десятки популярных утилит (сейчас оттуда стоит редирект на https://learn.microsoft.com/en-us/sysinternals/). Все программы поначалу были бесплатными.
Как известно, с середины 90-х выпуск и продажа мелких программ по модели shareware (в просторечье «шаровары») через интернет позволял единственному программисту быстро заработать миллионы долларов. Многие помнят 19-летнего студента Джастина Франкеля, которого просиживал сутки напролёт дома за компьютерными играми, но после создания примитивного MP3-плеера Winamp в 1997 году денежные чеки по $10 приходили ему мешками со всего мира, а ведь Джастин даже не сам написал эту программу, а использовал труд своего однокурсника Дмитрия Болдырева, а потом заплатил ему за молчание (если верить Дмитрию, конечно).
Вообще, в 90-е годы многие разработчики испытывали удачу с помощью «шаровар». Это была революция: для заработка достаточно одного компьютера. Не нужно ходить в офис. Сиди дома и программируй. Создавай. Есть идея и талант — весь мир у твоих ног. Наконец-то программисты в разных уголках планеты стали получать зарплату американского уровня — всё благодаря интернету...
… Можно сказать, что утилиты Winternals выставили Microsoft в невыгодном свете. Все ясно увидели, какой функциональности сильно не хватает в операционной системе, каких настроек там нет, что сделано коряво по дефолту. И удивительно, что все эти косяки продемонстрировал по сути один программист. Фактически, он знал ядро Windows и умел программировать лучше, чем тысячи разработчиков редмондской корпорации. Оно и неудивительно, ведь он работал на себя, а не на дядю.
Большинство утилит в базовой версии распространялись бесплатно, но компания продавала профессиональные версии этих инструментов (так работает один из вариантов бизнес-модели shareware), а также отдельный коммерческий софт для восстановления данных.
Список утилит
Вот некоторые из программ SysInternals, Wininternals и NTInternals, начиная с 1996 года. Указаны ссылки на некоторые утилиты, которые официально распространяются до сих пор с сайта Microsoft.
▍ Системные утилиты
- BlueScreen — скринсейвер, который эмулирует синий экран смерти и перезагрузку компьютера;
- Process Explorer и Process Monitor — продвинутые версии нативного Windows Task Manager;
- Autoruns — самая продвинутая программа для управления автозагрузкой;
- SDelete — безопасное удаление файлов, чтобы на диске не оставалось следов;
- BgInfo — автоматическая генерация обоев рабочего стола с системной информацией;
- TCPView — просмотр активных соединений;
- NTFSDOS — работа с дисками NTFS под Windows 95 и 98, которые на тот момент не поддерживали эту файловую систему (сейчас утилита удалена с официального сайта);
- Contig — утилита командной строки для дефрагментации HDD.
- Coreinfo — утилита командной строки, которая выводит в консоль соответствие логических и физических CPU, узлов NUMA, сокетов и кэшей для каждого логического процессора. В общем, вся инфа по железу.
Пример выдачи
Coreinfo v3.03 - Dump information on system CPU and memory topology Copyright (C) 2008-2011 Mark Russinovich Sysinternals - www.sysinternals.com Intel(R) Xeon(R) CPU W3520 @ 2.67GHz Intel64 Family 6 Model 26 Stepping 5, GenuineIntel EM64T * Supports 64-bit mode VMX - Supports Intel hardware-assisted virtualization SVM - Supports AMD hardware-assisted virtualization HYPERVISOR * Hypervisor is present HTT * Supports hyper-threading SMX - Supports Intel trusted execution SKINIT - Supports AMD SKINIT EIST * Supports Enhanced Intel Speedstep NX * Supports no-execute page protection PAGE1GB - Supports 1GB large pages PAE * Supports > 32-bit physical addresses PAT * Supports Page Attribute Table PSE * Supports 4-MB pages PSE36 * Supports > 32-bit address 4-MB pages PGE * Supports global bit in page tables SS * Supports bus snooping for cache operations VME * Supports Virtual-8086 mode FPU * Implements i387 FP instructions MMX * Supports MMX instruction set MMXEXT - Implements AMD MMX extensions 3DNOW - Supports 3DNow! instructions 3DNOWEXT - Supports 3DNow! extension instructions SSE * Supports Streaming SIMD Extensions SSE2 * Supports Streaming SIMD Extensions 2 SSE3 * Supports Streaming SIMD Extensions 3 SSSE3 * Supports Supplemental SIMD Extensions 3 SSE4.1 * Supports Streaming SIMD Extensions 4.1 SSE4.2 * Supports Streaming SIMD Extensions 4.2 AES - Supports AES extensions AVX - Supports AVX intruction extensions FMA - Supports FMA extensions using YMM state MSR * Implements RDMSR/WRMSR instructions MTTR * Supports Mmeory Type Range Registers XSAVE - Supports XSAVE/XRSTOR instructions OSXSAVE - Supports XSETBV/XGETBV instructions CMOV * Supports CMOVcc instruction CLFSH * Supports CLFLUSH instruction CX8 * Supports compare and exchange 8-byte instructions CX16 * Supports CMPXCHG16B instruction DCA - Supports prefetch from memory-mapped device F16C - Supports half-precision instruction FXSR * Supports FXSAVE/FXSTOR instructions FFXSR - Supports optimized FXSAVE/FSRSTOR instruction MONITOR - Supports MONITOR and MWAIT instructions MOVBE - Supports MOVBE instruction PCLULDQ - Supports PCLMULDQ instruction POPCNT * Supports POPCNT instruction SEP * Supports fast system call instructions DE * Supports I/O breakpoints including CR4.DE DTES64 - Can write history of 64-bit branch addresses DS - Implements memory-resident debug buffer DS-CPL - Supports Debug Store feature with CPL PCID - Supports PCIDs and settable CR4.PCIDE PDCM - Supports Performance Capabilities MSR RDTSCP * Supports RDTSCP instruction TSC * Supports RDTSC instruction TSC-DEADLINE - Local APIC supports one-shot deadline timer xTPR * Supports disabling task priority messages ACPI * Implements MSR for power management TM * Implements thermal monitor circuitry TM2 * Implements Thermal Monitor 2 control APIC * Implements software-accessible local APIC x2APIC - Supports x2APIC CNXT-ID - L1 data cache mode adaptive or BIOS MCE * Supports Machine Check, INT18 and CR4.MCE MCA * Implements Machine Check Architecture PBE * Supports use of FERR#/PBE# pin PSN - Implements 96-bit processor serial number Logical to Physical Processor Map: *--- Physical Processor 0 -*-- Physical Processor 1 --*- Physical Processor 2 ---* Physical Processor 3 Logical Processor to Socket Map: **** Socket 0 Logical Processor to NUMA Node Map: **** NUMA Node 0 Logical Processor to Cache Map: *--- Data Cache 0, Level 1, 32 KB, Assoc 8, LineSize 64 *--- Instruction Cache 0, Level 1, 32 KB, Assoc 4, LineSize 64 *--- Unified Cache 0, Level 2, 256 KB, Assoc 8, LineSize 64 -*-- Data Cache 1, Level 1, 32 KB, Assoc 8, LineSize 64 -*-- Instruction Cache 1, Level 1, 32 KB, Assoc 4, LineSize 64 -*-- Unified Cache 1, Level 2, 256 KB, Assoc 8, LineSize 64 --*- Data Cache 2, Level 1, 32 KB, Assoc 8, LineSize 64 --*- Instruction Cache 2, Level 1, 32 KB, Assoc 4, LineSize 64 --*- Unified Cache 2, Level 2, 256 KB, Assoc 8, LineSize 64 ---* Data Cache 3, Level 1, 32 KB, Assoc 8, LineSize 64 ---* Instruction Cache 3, Level 1, 32 KB, Assoc 4, LineSize 64 ---* Unified Cache 3, Level 2, 256 KB, Assoc 8, LineSize 64 **** Unified Cache 4, Level 3, 8 MB, Assoc 16, LineSize 64 Logical Processor to Group Map: **** Group 0
- DebugView — перехват вызовов к
DbgPrint
от драйверов устройств и из программ, в том числе на удалённой системе через интернет без запуска дебаггера; - Desktops запускает до четырёх виртуальных десктопов и позволяет удобно переключаться между ними;
- LoadOrder — показывает порядок загрузки устройств на WinNT/2K;
- MoveFile и PendMoves — позволяет запланировать удаление или перемещение файла автоматически после следующей перезагрузки компьютера (например, в свой последний день работы в компании);
- NotMyFault — планирование различных сбоев, перезагрузок и других диверсий под Windows;
- PageDefrag — дефрагментация файлов, в том числе файлов подкачки и кустов реестра, что в то время было недоступно обычными инструментами для дефрагментации, в своё время утилиту включили в состав 32-битных Windows;
- RootkitRevealer — бесплатная утилита для локального обнаружения руткитов. Программа непрерывно сканирует API файловой системы (MFT, NTFS, FAT16/32), а также системного реестра и выводит список несоответствий к реальным данным;
- PortMon — мониторинг параллельных и последовательных портов, в том числе отображение передаваемых данных;
- ProcDump — дамп процессов для реверс-инжиниринга, воспроизведения процессов и расследования причин, например, пиков в использовании CPU;
- NT Locksmith — взлом паролей Windows (формально «восстановление забытых паролей»);
- PsPasswd — изменение пароля на локальном или удалённом компьютере;
- PsShutdown — выключение или перезагрузка компьютера;
- PsSuspend — приостановка и возобновление процессов.
- диспетчер памяти RAMMap от 18 мая 2010 года стал первой утилитой, выпущенной после покупки компанией Microsoft.
- Zoomit — программа для быстрой записи маленьких технических презентаций: зуммирования экрана, рисования на экране, подписи в любых местах и т. д., когда нужно что-то показать и объяснить со своего экрана другому человеку (или нескольким).
▍ Менеджеры и комплекты утилит
- Winternals Administrator’s Pak (ERD Commander 2005, Remote Recover 3.0, NTFSDOS Professional 5.0, Crash Analyzer Wizard, FileRestore 1.0, Filemon Enterprise Edition 2.0, Regmon Enterprise Edition 2.0, AD Explorer Insight for Active Directory 2.0, TCP Tools)
- Protection Manager
- Defrag Manager
- Recovery Manager
- и др.
В общей сложности Марк с Брайсом написали более 65 утилит. Судя по всему, даже после основания компании и найма джуниоров они работали ведущими программистами и писали часть кода.
Сейчас Microsoft продолжает поддержку и обновление многих из этих инструментов, и даже выпускает версии под Linux.
Примечание. Кроме системных инструментов SysInternals, для Windows ещё выпускается набор PowerToys, к разработке которого Марк Руссинович не имеет отношения. Это программки для тонкой настройки различных аспектов UI типа Always on Top, которая закрепляет одно окно поверх других и Диспетчер клавиатуры для переопределения клавиш на клавиатуре (например, можно повесить запуск разных скриптов на ScrollLock или F5–F12, а также переназначить любые системные хоткеи, кроме Ctrl+Alt+Del и ещё парочки). Недавно программы выложили в опенсорс.
Панель PowerToys Run из комплекта PowerToys
Сделка с Microsoft
В июле 2006 года Microsoft купила Winternals Software и все её активы. Марк объявил эту новость в своём блоге и пояснил, что продолжает распространение утилит из комплекта Sysinternals до тех пор, пока Microsoft против этого не возражает.
Однако не всё пошло гладко. Сразу после сделки с Microsoft с сайта была удалена утилита NT Locksmith для восстановления «забытых» паролей Windows. Вероятно, юристы посчитали, что её можно использовать для взлома, то есть для несанкционированного доступа к компьютерной информации, за что предусмотрена статья в УК.
Хотя если рассматривать хакинг в более широком смысле, то половину системных утилит Sysinternals можно рассматривать как «взлом Windows», если мы получаем доступ к информации, недоступной штатными средствами ОС. Ведь чтобы понять устройство любой системы, нужно её вскрыть, как же иначе? То есть взлом, хакинг — тоже системное программирование.
Вскоре с сайта удалили большую часть исходных кодов программ. Но это вполне логично, потому что Microsoft всегда была врагом движения Open Source, считая свободные (вирусные) лицензии главной опасностью для индустрии коммерческого ПО.
Первоначально Марк Руссинович получил должность технического специалиста в подразделении платформ и сервисов Microsoft, в сферу которого входит разработка ядра Windows. Со временем его таланты проявились более очевидно — и к 2014 году он дорос до технического директора в Microsoft Azure.
Эта история показывает, что большой успех может начинаться с очень маленького дела — одной или простой утилитки, написанной буквально за вечер. Так было и с Winamp, хотя о гениальности Френкеля не идёт и речи, потому что достаточно было набросать GUI и портировать под Windows готовый плеер. Однако с Марком Руссиновичем совершенно другая история. Он действительно проявил себя как высококлассный системный программист, заработал уважение миллионов системных администраторов, которые до сих пор используют его утилиты каждый день. Подобное уважение миллионов людей и собственный талант всегда легко конвертировать в деньги, если есть такое желание.
Брайс Когсвелл уволился в 2010-м, а Марк Руссинович до сих пор работает в Microsoft. В отличие от большинства компьютерных гениев-самоучек, у него степень PhD и полный набор софт-скиллов, чтобы успешно влиться в большую корпорацию. Что он в итоге и сделал. Такой хакерский путь тоже возможен.
Автор: Анатолий Ализар