Pull to refresh

Comments 120

Я не совсем понял — а для чего это нужно? Что мы получим в итоге? vhd на котором можно будет запускать Х? Или это модифицирует нашу систему? =)
Это нужно исключительно в рамках моего крестового похода за здравым смыслом. Вместо того, чтоб каждый раз доказывать, что «графику в ядре» можно вырезать — мне показалось проще один раз более менее полно изложить свои мысли и теперь можно давать ссылку.
Да, но для чего ее нужно вырезать/невырезать? :) Сделать из windows — windows-core-core? =)
Отличный вопрос на самом деле :-)
Но есть миф о прибитой намертво графике (на самом деле с точки зрения дизайна это в общем то плохо). Мне показалось не лишним побороться и этой мельницей.

Да и вообще задача вырезания «лишнего» показалась интересным развлечением на выходные.
Хм… значит говорите можно попробовать поднять свой домен на кофеварке для микроволновки, электроплиты, посудомойки и холодильника? :)
Хотя наверное лучше на холодильнике, там вроде хард побольше :))))

З.Ы. А что умеет делать такая ммм… минимальная система? Ну в смысле — для чего ее можно эффективно использовать?
Насчет домена не знаю, но апач «взлетит». Опять таки, повторю, для меня загадка на фига это надо


Сам MS занялся расслоением, насколько я понимаю для компонентизации. То что пара нижних слоев может работать вообще без всякой мишуры сверху — не более, чем забавный побочный эффект. В винде сейчас что-то около 50 слоев и каждый бинарник принадлежит какому нибудь слою.
В теории это может быть полезно т.к. на серверах все равно мониторов нету, равно как и видеокарт и лишняя сущность в виде графической оболочки — лишняя.
На практике — не очень представляю как можно виндой пользоваться без графической оболочки и по этому на этих серверах стоит линух.
где нибудь, когда нибудь:
«В вашей винде одна черная консоль! Да все работает, но работать же просто не возможно. Пойду поставлю линукс, там хоть оконный интерфейс есть, не говорю уже о всяких визардах»
Вы не поверите, но таки есть редакция Windows Server 2008 R2 Server Core, в которой убрали графическую оболочку. Оставили один powershell, а он по мощности ничуть не уступает линуховым шеллам, а местами в силу своей обьектности даже удобнее.
Ну и еще одно следствие из этого: можно сделать версию Win7 «для кофеварок». Ограничения здесь не столько технологические, сколько экономические.
Насколько это всё отличается от устройства ReactOS? Судя по всему, реально с ней сделать такое же?

Я имею ввиду, что если бы пример базировался на ней, можно было бы смело выкладывать образ, это было бы законно.
На базе реактоса можно сделать подобное — архитектурно они повторяют винду.
Я, честно говоря, писал это для того, чтоб приоткрыть еще одну грань архитектуры Windows. Вы знаете какое нибудь реальное применение подобному? (без айрони)
Интерес исключительно академический.

Хотя, в принципе, можно предложить такое применение: существуют разные сервисы только-для-винды, которым не нужна графика — можно было бы их запускать на виртуалке вот в такой обрезаной системе, получая некоторую экономию памяти. Типа веб-интерфейса паруса.
Если при таком раскладе запустится связка IIS + MSSQL, и оно сможеть управляться допустим через ssh, то почему бы и нет? Памяти никогда не бывает много :)
Управляться через ssh однозначно сможет — я ставил в винде openssh, проблема была только с кодировкой (у меня на десктопе utf-8, там — 866).

Другое дело, что, насколько я понимаю, связка IIS+MSSQL сама по себе достаточно прожорлива. Может статься так, что на её фоне загруженная и уложенная в подкачку графика будет мелкими процентами. Тогда и огород городить нет смысла.
А чем вас не устраивает Windows Server 2008? В нем-же гуй можно вообще штатными средствами отключить. Если что — не бейте — сужу, в целом, как юзер. Не закапывался в подробности реализации
Вы имеете ввиду Server Core? В варианте Server Core гуй есть, т.е. остаётся обычный графический логин-скрин, но при входе в систему запускается только cmd.exe и ничего кроме него. Там можно развернуть AD, соответственно DNS и DHCP, IIS, и есть несколько графических программ — notepad, taskmanager.

То, что в топике — кардинально другое.
Вот за такие статьи я и люблю Хабр!
Вот смотрите, на Хабре был долгий период отличных низкоуровневых статей, потом пошло на убыль, сейчас эпоха возрождения, когда действительно интересные (и не только низкоуровневые) статьи встречаются все чаще. Самое главное — что таким и должен быть уровень хабра (таким и закладывался, имхо), народ не должен визжать при одном виде hex-редактора или куска power shell скрипта, не должно перехватывать дыхание от патча двух байт.

Поэтому важно выдержать баланс ситуации, у amirula есть ряд статей, которые улетели в небо, будучи даже толком не осмысленными. Народ просто тупо проорал нечто вида «Хабр торт!» и забился в диком экстазе не прочитав и первой страницы. Нечто похожее вышло со многими топиками за последние пару месяцев — народ видит низкоуровневость темы, херачит плюс и уходит без обсуждения, либо тупо кинув хабрторт в автора.

К чем я это все. Давайте не будем превращаться в пендосов, у которых 90% треда — «thank you» & etc. Статья (да и весь цикл в целом) действительно заслуживает как минимум уважения и желания взять на работу :) Давайте будем стараться обсуждать серьезные вещи, а не выкрикивать хабрторт и листать дальше. Ну и в таком духе.

Извините за выхлоп. Мое почтение amirulу.
Извините меня за мое наивное восхищение работой автора, работой, которую никто, кроме него, на Хабре почему-то не догадался проделать, в том числе и я. На мой взгляд, эта статья выгодно отличается от статей уровня «Тысяча и один способ сделать скругленные уголки». Но это сугубо мое личное мнение.
Не хотел вас обидеть, да и цеплять вас было не за что. Не хотел чтоб вас минусовали. Цель преследовалась иная. И про уголки я с вами соглашусь. Но с «не догадался проделать» и прочей шляпой идите в лес :) Лишнее это все, имхо. Если есть желание — в личку, попробую пояснить о чем речь.
С обсуждением проблема в том, что на хабре похоже не так много людей, которые действительно могут вести серьёзное обсуждение по настолько низкоуровневым темам как в этом топике или в статьях этого же автора про управление памятью. Таких людей просто достаточно мало.

Мне вот например, кроме как сказать «Хабр торт!», обсудить по теме особо и нечего.
С таким же успехом можно десктоп-девелоперам заходить в каждый топик про очередной js-фреймворк & etc и писать «Хабр торт!». Вот я о чем. Если все скатится до банального хабртортания — то как держать планку?
Теоретические выкладки без системного применения не найдут толкового обсуждения на Хабре, здесь же не wasm. Другое дело — новый JS-фреймворк.
Все-таки Хабра — это агрегатор с гигантским коммунити, тут все что угодно приживется. Тем более многие интересные персонажи, в том числе и с андеграунда, здесь периодически появляются.

Вот вы про wasm вспомнили. Там десяток адекватов, пара адекватов-наркоманов и толстый слой нубов в перемешку с новоявленными «коммерсантами». Тоже самое cracklab (там вообще рейтингомастурбаторы) и прочие. Смотрю последнее время — аж слезы наворачиваются.
Консольная винда. Линуксоиды негодуэ.
Почему, наоборот, безумно интересно. Говорю за себя.
ну да. Я бы еще туда цигвин поставил…
Цигвин работает поверх Win32 и соответственно win32k/csrss должны быть запущены. С другой стороны В ПРИНЦИПЕ можно попробовать открутить win32 подсистему и оставить только posix (psxss.exe), но если бы меня кто нибудь спрашивал, я бы сказал, что от чистого Win32 я не в восторге, но от Posix меня вообще тошнит
Вот насчёт POSIX это зря, он гораздо более логично устроен, чем Win32. У меня в студенческие годы была idée fixe, написать нормальную POSIX-подсистему к NT kernel, т.е. сделать что-то вроде GNU/NT. Правда, к реализации этой затеи я так и не приступил, уж не знаю, к счастью или к сожалению, но вот как-то так.
Какая часть там логична?
>У меня в студенческие годы была idée fixe, написать нормальную POSIX-подсистему к NT kernel
Зачем? Сертифицированная POSIX подсистема есть в винде ещё начиная с Windows NT.
Я ставил на винду Gentoo и emerge'ил XFCE (+несколько сотен зависимостей), который вполне сносно работал.
fotki.yandex.ru/users/sad-wind/view/65339/?page=0
fotki.yandex.ru/users/sad-wind/view/65344?page=0
Цигвин-то там зачем? Тут уж если ставить, то SUA.
а он тоже имитирует набор утилит GNU? я просто не пользовался SUA. А вот цигвином приходится…
Даже не имитирует, а именно реализует.

Как выше упоминалось, даже можно запустить Portage в этом SUA и получить «Gentoo Windows». На самом деле это называется «Gentoo Prefix/Portage for Windows». И в этом окружении собирается много что — например, mc мне удалось собрать, openvpn.

Ух ты, а готовые там есть типа демона SSH или cron?
Учтите только, что в голом SUA/Interix всё довольно древнее, скажем, gcc 3 и т. п.

Лучше сразу ставить Prefix/Portage или что-то подобное.
В совсем голом SUA в семёре кроме posix подсистемы вообще ничего нет. Поэтому сразу можно ставить генту, а на пачку GNU от MS забить.
Что значит «имитирует»? Там есть gcc
Кто круче: виндузятник, который через консоль может заставить винду работать или линуксойд, которому, в общем-то, ничего другого не остается (да, я знаю, что есть всякие убунты и т.д.)?
Перестал работать в линуксе и стал работать в венде
Console 2 + Powershell + пара скриптов = нормальная работа
так что жизнь есть и под вендой

P.S. Правда подтолкнули к переходу игры и ограниченные ресурсы ноута для виртуализации, а не удобства указанной выше конфигурации
Console2 просто поражает обилием глюков, хоть внешне он и выглядит удобнее, но когда простейший копипаст превращается в мучение из за «особенностей» работы приложения в win7 хочется выть от тоски.
хм… ставил его давно и может быть чего-то настраивал, но глюков нет.
ставил его именно из-за копипаста ибо cmd и powershell 2 вообще через ":%*:%" копируют.
Единственное неудобство — копирует тока мышкой, зато автоматом по выделению(выделил, отпустил кнопку и всё в буфере)

опять же удобно — можно завести большой набор пресетов из микса интерпритатор\startup dir\тема
>Единственное неудобство — копирует тока мышкой, зато автоматом по выделению(выделил, отпустил кнопку и всё в буфере)

Вот собственно эта часть в вин7 и не работает нормально. Вот все думал отодрать там часть, ответственную за собственно консоль и приделать к этому Qt4 гуй, но код там настолькокривой и ужасный выше моего понимания, что никак не могу это сделать.
я ставил все на win vista, потом перешел на win 7 и всё ок.
если надо — могу скинуть консоль 2 с конфигом
но лучше бы Вы сделали гуй хотя на Qt4, хоть на чём еще — цены бы Вам не было!
еще б с нормальным хистори… эх…
Я бы сделал, но я так и не понял как оно вообще работает. Код там представляет собой наслоение макросов, ужасных конструкций в стиле MFC и прочего спагетти-ада. А каким образом в винде с нуля делать эмулятор терминала я даже ума не приложу.
Гляньте QTermWidget — его не так давно подхватил другой разработчик и довольно активно пилит. В «былые времена» он собирался и под винду, как сейчас обстоят с ней дела — не в курсе, но в любом случае по-моему это будет проще и быстрее, чем приделывать Qt-гуй к Console2.
А это всего лишь отодранная от konsole часть. К сожалению, таки тоже не поддерживает вин.
Хотя я однажды видел konsole с поддержкой cmd и она даже работала! Но неимоверно криво. Но таскать в винде половину кед ради этого малость неудобно.
Строго говоря, cmd и powershell сами ничего не копируют. В Windows 7 консольное окно рисует и производит обработку всего происходящего внутри процесс conhost, в остальных виндах — процесс csrss. Отличие между этими окнами по дефолту только в цвете и «Quick Edit Mode/Insert Mode».
> Отличие между этими окнами
«Этими» в смысле между окнами powershell и cmd.
Единственный глюк, с которым я столкнулся в console2 — это не всегда адекватная работа в многомониторных конфиругациях (если свернуть окно в таскбар — оно может развернуться в произвольное место на виртуальном десктопе). С копипастом никогда проблем не имел (может просто не замечал) — не подскажете, в чем именно проблема?
а работает он как-то странно. Особенно непонятно, как вставку текста делать. Нету нормальной истории введённых команд (как и в cmd кстати).
Ну и из придирок конечно вырвиглазные убогие MFC тулбары. И вообще эмуляторы в стиле yakuake куда удобнее, места не экране вообще не занимают пока нет в них нужды.
Копипаст там настраиваемый. Как клавиатурный так и мышиный:


История команд есть (F7 — список, F8 — автокомплит и т.п.), но наверное она не нормальная.

Тулбары — действительно уродские (я их отключаю), хотя они не имеют отношения непосредственно к MFC. Quake-style консоль — можно сделать нечто вроде того (on demand в углу экрана, но без красивых эффектов появления/исчезания), нацепив console2 на горячую клавишу
UFO just landed and posted this here
Ну он, мягко говоря, вообще ниразу не подходит.
К примеру, запуск dev сервера Django в ISE и Console 2
floomby.ru/content/FSwRPfmCFk/
Смысл в том, что демон не может выводить логи своей работы
UFO just landed and posted this here
Просмотрел и понял, что всетаки я в Windows еще чайник…
Так и не понял что к чему. Длинющая последовательность нетривиальных действий, а в итоге нечто, по юзабельности между академическими микроядерными ОС и юниксами времен кислотной революции.
Я правильно понимаю что на этом образе можно поднять какой нить MSSQL/AD/IIS сэкономив сколько то RAM и HDD?
А чем оно кардинально будет отличаться от Windows 2008 R2 (к примеру), кроме возможного пучка геморроя?
поднять их может и получится; но любые веб-сайты, которые хотя-бы ресайзят картинки, содержат вызовы к GDI/GDI+, который вырезан
скорее всего нет, т.к. MSSQL — не native NT application
2 первых ваши статьи воспроизвел дома на ноутбуке и был приятно «удивлен»(-ли?) тому как моя машинка начала грузиться гораздо шустрее. Открытие Моего компьютера стало происходить гораздо быстрее.
«Пришлось»(это было приятно и полезно) расширить свой кругозор по устройству windows.

И вот очередная стотья, которая заставит меня покапаться — спасибо вам большое — жду продолжения.
Вы заставляете меня учиться, а не только смотреть в сторону своей специализации!
UFO just landed and posted this here
>>При большом желании, как я уже говорил, можно прикрутить полностью консольную оболочку, можно вырезать Windows подсистему и оставить только Posix (это было бы весьма странным желанием, как по мне, но люди довольно часто хотят странного). Или (еще более странное желание) реализовать нативный X11 поверх NT ядра.

Ну если разрабы реактоси что-то такое родят, то можно будет на родную винду это портировать ради фана. Мне вот интересно, есть ли какая-нибудь теоретическая возможность поменять видеорежим в консоле и есть ли там вообще кадровый буффер?
Судя по тому, что всякие «текстовые режимы» (ну, там, сообщение «APIC или не поставлюсь» при установке и прочее подобное) в 2008, Vista и 7 выглядят иначе, нежели в XP, есть подозрение что они что-то такое прикрутили.

«что-то такое» прикручено уже со времён win2k, если не раньше
Не, в NT, 2K, XP, 2003 инсталляция начинается одинаково — экраном с голубым фоном в стандартном текстовом режиме (80x25). Ничего там не прикручено.

Сравните с инсталлатором Vista, 7 и 2008.
а вы на autochkdsk гляньте, а также на BSOD.
и, кстати, в режиме 25x80 работает только досовая часть инсталлятора, потом оно переключается не то в 30x80, не то ещё во что-то
Любая аналогия лжива (с) Кто вспомнит из какой это книги, напишите пожалуйста — забыл :(
Звезды — холодные игрушки (С. Лукьяненко)
UFO just landed and posted this here
Я думал помру со смеху…
Спасибо! =)

<Вытирая слезы> Этот коммент разъяснил мне что к чему мне в этой статье!
Поправьте, если я ошибаюсь, но это Вы так искрометно шутите о том, что Win32 приложения не будут работать без Win32 подсистемы? Хм, кто бы мог подумать?

«При помощи нехитрых приспособлений» можно вообще открутить win32, оставить там только SUA/Interix и пугать детей (видел человека, запустившего портаж на SUA). Но зачем?

Цель показать, что никаких архитектурных препятствий полной смены (или полного отказа) графики нет, а то, что не реализовано — ну так помимо того, что это на фиг не надо (в отличие от X — win32 «не поломана» и чинить там особо ничего и не надо), так еще и "в принципе можно прикрутить на скриптах" — это же любимый аргумент «против винды».
> чинить там особо ничего и не надо
«Чинить» as in «complete rewrite» (как в случае с Wayland). Естественно никто в здравом уме не будет утверждать, что win32 совершенна и там не может быть никаких усовершенствований.
«complete rewrite» (как в случае с Wayland)

Думаю, я не единственный скептик по поводу Wayland. Он перспективен, но не как замена X. А Xorg не сломан.
UFO just landed and posted this here
UFO just landed and posted this here
И вот здесь встает вопрос, заданный в первом же комментарии: «Но зачем?». Ну то есть, да, я слышал об attack surface и все такое, но есть ли какие конкретные примеры хотя бы local EoP уязвимостей в win32k (хотя удаленный вектор был бы гораздо интереснее)? Я также слышал о ненужном использовании ресурсов — если оно не будет использоваться — оно попадет в своп и всего делов, в физической памяти останется только какой нибудь WS-Man/PSRemoting.

В общем, чисто практически никаких проблем никогда и не было. Теоретически, сильное связывание (tight coupling) могло бы означать проблему в дизайне — но его там, как видим, нет.
Не знаю спрашивал кто нибудь уже или нет, но если какая нибудь литература в которой хорошо описываются все внутренности Windows?
соломон + руссинович
UFO just landed and posted this here
Выше сказали про Соломона с Руссиновичем(а в свежем издании ещё и Ионеску) и исходники ReactOS. Там хоть и не дословная реализация, но пониманию способствуют.
UFO just landed and posted this here
win:  copy /b image.jpg+archive.rar result.jpg
*nix: cat  image.jpg archive.rar >  result.jpg
на самом деле больше интересует вопрос «зачем?»
>Следующую картинку можно открыть архиватором — там содержатся исходники и скомпилированный amd64 бинарник небольшого приложения native.exe

извращенцы на хабре! :)
а по мне так удобно и в контексте. самораспаковывающиеся архивы тоже можно открыть. тоже изврат? :)
А я бы посмотрел на X поверх NT ядра:)
Если честно, я нихуя не понял, но, как говорится, на всякий случай удачи :)
я ничерта не понял из топика :(
Совсем не разбираюсь во всем этом низкоуровневом программировании, поэтому хотелось бы где нибудь в начале или конце топика описание простыми словами что и зачем делается и что получается в итоге
Хм. Дело началось с того, что автору надоело (ветка) в спорах постоянно приводить одни и те же аргументы по поводу того, что в Windows графическая подсистема (штука, рисующая окошки-кнопочки, раб. стол…) «вшита» в ядро Windows, потому она (Windows) тормозит. В статье автор описал, как он «отключил» эту подсистему без функционального ограничения остальных частей. Этим автор говорит нам, что ядро никак не зависит от наличия этой подсистемы — она находится вне его, потому просто не может тормозить именно из-за этого. Вот и всё, как говорится, just for fun.
Спасибо, теперь все намного яснее!
Вы, выражаясь языком линуксоидов, удалили ядерный модуль и обнаружили, что система продолжает работать? Похвально :)

Ответьте на один вопрос: код win32k.sys выполняется в пространстве пользователя или ядра?
Возможно, я чего-то действительно не понимаю, но если я дебаггером изуродую структуры win32k — система падает в BSOD. А это, если мне память не изменяет, чисто ядерный механизм.
Даже если не уродовать дебаггером структуры x server — он и без того падает частенько. Утягивая за собой всю несохраненную работу, да. А если брать дебаггер, то через /dev/kmem (открытый на запись) очень легко увести систему в кернел паник. Usermode-овость x server-а не более, чем ширма, «под капотом» там все так же низкоуровнево, но гораздо более запутанно — как раз таки для повышения производительности
Не путайте: одно дело — уронить графическую подсистему, другое — уронить всю ОС.
Да, дебаггер на kmem — это прямое вмешательство в ядро. Вы утверждаете, что win32k.sys не является частью ядра. Взаимоисключающие параграфы?
X-сервер работает в чистом юзерспейсе, вся ядерная часть — это драйвера видеокарты.
вообще говоря, win32k.sys — не часть ядра, формально, а всего лишь модуль, который, да, работает внутри ядра, но не является его частью.
а что комментировать-то? сморозили глупость, чего уж там…
не часть ядра, формально, а всего лишь модуль

Не надо рассказывать линуксоидам о том, что модули не являются частями ядра. Потому, что почти весь линукс можно собрать как модулями, так и монолитом. И разницы ровно 0.
Вот именно, не надо линуксоидам-то рассказывать. Есть разница между Linux kernel и NT kernel. То, что у нас некоторые части ядра можно собрать модулями, не значит, что у них это тоже так, всё же win32k.sys есть вещь очень обособленная.
>всё же win32k.sys есть вещь очень обособленная.
Настолько, что без неё подняли WinNT без WinAPI. Офигенно. Китайцы WinAPI в ядро линукса вкомпиливают, а тут его из NT выковырнули вместе с графикой.
Да, выполняется в ядре. Если Вы паче чаянья соберетесь сравнивать с X11, ответьте на вопрос: от имени какого пользователя запускается x server, какие ограничения имеет этот пользователь, открывает ли x server «устройство» /dev/kmem на запись.
от имени какого пользователя запускается x server, какие ограничения имеет этот пользователь, открывает ли x server «устройство» /dev/kmem на запись.

root, никаких, иногда. Но это происходит в ring3.
И иксы при особом желании запускаются без прав рута. Особенно с KMS, который чем-то похож на win32k.sys, но делает на порядки меньше.
X-сереры разные бывают. Xvfb, например. От любого пользователя можно запустить, даже без KMS. :)

за наглядную демонстрацию большое спасибо, но, не умаляя её значимости, замечу, что вообще такие финты известны уже очень давно, а «живой» вариант винды без гуёв давно был как минимум в 1999 году — windows recovery console или как-то так.

P.S. Linux ileemo 2.6.35-trunk-686 #1 SMP Tue Aug 17 14:30:48 UTC 2010 i686 GNU/Linux
Спасибо за уточнение — забыл о нем. WinRE инициализирует графику, поэтому в качестве примера не рассматривался, а о recovery console как то даже и не вспомнил.
Своеобразно. Что же, в recovery console можно сервисы стартовать?
В этой штуке, которая здесь описана — тоже нельзя (ну то есть «в принципе» можно, ага).
Работа Recovery Console в Windows 2000 (http://support.microsoft.com/kb/229716) — насколько близка к тому режиму работы, который вы описываете?
О, так это же тот бинарник и есть. Все понятно.
Sign up to leave a comment.

Articles