Просмотров: 8524

GUI vs. CLI: война продолжается


"Графические кнопки нужны только идиотам"

/usr/src/usr.bin/mg/theo.c

Тео де Раадт, OpenBSD

Давайте сегодня немножко поговорим на тему одной популярной "священной войны" (holywar), что же лучше: графический интерфейс (Graphical User Interface, GUI), или всё-таки идеология консоли или командной строки (Command Line Interface, CLI). Тем более проще это будет сделать, потому что совсем недавно, на сайте IT-издания InfoWorld Пол Венеция (Paul Venezia) поднял горячую тему оптимального создания интерфейсов для конфигурирования системы и выполнения административных задач, выступив с острой критикой GUI-интерфейсов, подобных YaST. По мнению Пола, GUI-интерфейс должен быть лишь надстройкой над проработанным интерфейсом командной строки и текстовых файлов конфигурации, но не заменой. В своей статье "Возьми этот GUI и выкинь" Пол в частности пишет:

"Этот мой  выбор CLI не является техно-чудачеством, это основано на реальном ежедневном опыте администрировании серверов и сетей. Вспомните четыре самых крупных производителя роутеров и свитчей за 15 последних лет: Cisco, 3Com, Nortel и Cabletron. Из них только Cisco постоянно разрабатывала интерфейс управления, основанный на командной строке, в то время как все остальные предпочитали модные текстовые и графические меню для настройки оборудования. Некоторые также включали убогий CLI-шелл, который давался в довесок, но все они, такие простые и выразительные в использовании, были вытеснены сравнительно запутанным и навороченным CLI от Cisco. Из этих четырёх компаний только Cisco процветает, когда остальные полностью провалились и были беспощадно задавлены.

Позвольте мне привести пример. У меня недавно была задача создать сложную сеть, используя средства безопасности Cisco ASA. Используя CLI, я настроил всё, что мне требуется в одном ASA: это IP адреса, маршруты, настройку туннелирования OSPF, параметры VPN-канала, набор правил QoS, списки доступа, правила для удалённых и локальных администраторов, строки SNMP, логи, новую версию прошивки - всё запустил и всё работает. Затем можно просто скопировать все настроенные текстовые конфигурационные файлы и, при помощи sed заменить все IP-адреса и параметры сети и получить (за минуту или две) полную конфигурацию для другого узла ASA. Всё, что для этого требуется - залогиниться на него, скопировать нужную прошивку и конфиги, ну и затем перезагрузиться. Как ни смотри, это крайне просто и эффективно, что является одной из сторон простоты CLI и текстовых конфигурационных файлов.

Но затем я перешёл на Cisco SA520. В SA520 нету CLI или, вообще, даже обычной консоли. Но зато у него есть замечательный дружелюбный к пользователю WebUI (графический интерфейс управления через web). В то время, как раньше я мог настроить это устройство за минуту или две, как я это делал с его старшими братьями, здесь мне пришлось буквально пробираться через каскад меню WebUI для каждой отдельной опции, чтобы сделать практически такую же конфигурацию, как у других ASA, с отличиями для этого сайта. Этот процесс настройки одного узла занял больше времени, чем я тратил для настройки всех других ASA с CLI вместе взятых. Номинально, вам кажется, что настройка через WebUI будет легче и приятнее, чем через CLI, но, в реальной жизни, это не так. И речь идёт не только о затрате усилий - также учитывайте точность. Если вы запускаете скрипт, то можете быть уверенным, что выполненные изменения будут идентичными на каждой машине. Если же вы делаете всё вручную, как обезьяна, настраивая пару сотен таких узлов, повторяя в припадке по тысячу раз одни и те же осточертевшие действия, то уверенности в этом быть уже не может.
"

Пол приводит и множество других правильных и практических примеров из своей жизни в статье, но давайте не будем кидаться в крайности, всё же,  в некоторых случаях GUI также весьма полезен, и по возможностям превосходит CLI по уровню своего удобства. Давайте для противовеса позиции Пола, приведем пару примеров этого навскидку. Первое, что приходит мне в голову, что администрировать, например, каталоги, наверное, более удобнее в графическом интерфейсе, чем, скажем, через команды ldapadd(1), ldapdelete(1), ldapmodify(1), ldapmodrdn(1), ldapsearch(1).

Командная строка - это, конечно, круто и профессионально, но ситуация, когда изучение настройки очередной программы-утилиты приближается по сложности к изучению нового скриптового языка - это тоже не совсем удобно. Например, часто админы бьются над тем, чтобы "настроить маршрутизацию" при том, что 90% этих людей хотят довольно-таки тривиальных вещей, а не "фильтрование и прибивание пакетов по тысячам условиям", и с такой простой задачей GUI справился бы лучше. Бывают ещё случаи, когда нет дефолтного конфига, и тогда создание нового конфига "с нуля" для неизвестной ранее утилиты может здорово подпортить нервы даже самым большим фанатам командной строки.

Другое, что приходит на ум из "приятных воспоминаний", это ситуация, когда одновременно открыты окна с конфигами, например, Apache, Squid, Samba, ftp, ldap и т.д. - и первое что бросается в глаза, что у них всех синтаксис совершенно разный. Тут невольно крыша поедет, когда переходишь в процессе настройки от одного конфига к другому, и снова наоборот. А ещё, кстати, есть Gnome, прогрессивно хранящий все свои настройки в xml. Кроме того, учтите, бардак усугубляет то, что синтаксис консольных команд в разных дистрибутивах Linux/*BSD бывает разный, и конфиги могут покоиться в разных файлах и даже каталогах. Взять и сравнить те же SUSE, Debian или Slackware...

Поэтому, хочется привести вывод статьи Пола Венеции, с которым я полностью согласен: "Мораль моей личной истории такова: графические интерфейсы замечательны и необходимы во многих случаях. Но они должны быть тогда, когда уже есть нормальный CLI, только дополняя его. В противных же случаях, это позволяет делать за счет GUI простые вещи просто, а сложные - значительно более сложно". При этом хотелось бы, чтобы GUI и CLI действительно дополняли друг друга, а не развивались независимо и параллельно, как это получилось в 2009 году, когда Microsoft изобрела и защитила в патенте под номером 7617530, "метод запуска команд с правами администратора".

Тогда эта заявка вызвала волну возмущений в ИТ-сообществе, фактически, после стольких лет своего развития и упорных исследований, Microsoft наконец "изобрела" для себя команду sudo из мира Unix, назвав её runas, и сразу ревностно защитив её патентом. Если с такой скоростью Microsoft будет продвигаться и дальше, то к году этак 2050-му она постепенно запатентует половину всех существующих команд Unix. Шутки шутками, но справедливости ради добавлю, что у Microsoft появился PowerShell, который способен эмулировать много чего: от обычного интерпретатора cmd.exe, до юниксового bash, да и сам по себе весьма продвинут и сами знаете как ориентирован (я имею ввиду технологию .Net, а не то что вы, вероятно справедливо, подумали).

И, кстати, о будущем той же командной строки. Пока в Windows GUI "прогрессирует" от версии к версии, прирастая в своем развитии всё новыми наворотами так нам всем жизненно необходимым Aero, то с командной строкой всё тоже не так гладко. Например, кто даст гарантии, что лет эдак через 5, путь /bin/sh не станет всего лишь ссылкой на usr/bin/python, тогда кстати, все эти grep, findutils, coreutils, sed, gawk и прочие - можно будет просто выкинуть из системы за ненадобностью.

Другая интересная тенденция, это когда не только идеология GUI, но и методики CLI начинают успешно проникать в Web. Первое, что приходит на ум, это сервис типа goosh.org - командная строка для работы с сервисами Google. Несмотря на свой простенький вид, Google Shell используя Ajax поможет вам добраться почти до всех сервисов Google.

Или отринув стандартные подходы прошлого века, можно перейти сразу к CLI v.2.0 - социальной командной строке yubnub.org, где сообщество добровольцев сообща постепенно воссоздает всю мощь командной строки, но уже в Web. Для большего погружения в командную среду, можно поставить в свой Firefox плагин Vimperator, чтобы ощутить себя в старом добром редакторе vim, или вообще использовать Taskfox, который позволяет управлять браузером через ввод управляющих команд в поле ввода URL. Кстати о последнем варианте...

Некоторые пошли ещё дальше и утверждают, что командная строка уже давно переселилась в сам браузер, и реинкарнировалась там в адресную строку. Не верите, что оттуда также можно выполнять команды? Тогда наберите там что-нибудь, например строку, javascript:alert('Привет, CLI!'). И не забудьте, каждая команда в настоящей командной строке должна подтверждаться нажатием клавиши "ввод".

Удачных вам экспериментов!

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru pikabu.ru blogger.com liveinternet.ru livejournal.ru google.com bobrdobr.ru yandex.ru del.icio.us

Подписка на обновления блога → через RSS, на e-mail, через Twitter
Теги: , , , ,
Эта запись опубликована: Понедельник, 8 ноября 2010 в рубрике Unix'овоеМнения.

4 комментария

Следите за комментариями по RSS
  1. Всецело поддержу Пола Венеция.

  2. Спасибо за очень интересную статью, особенно за ссылки. И блин, меня опередили с переводом статьи с InfoWorld :) Ну, как говорится, кто первый встал... и да -

    >> используя Ajax поможет вам добраться почти до всего, что есть у Goggle

    очепятка ;)

  3. Мне кажется, главное (и единственное) преимущество GUI в том, что сразу видны все возможные параметры, в отличии от CLI где о каких-то параметрах можно забыть (или можно вообще не знать об их существовании).

  4. Дядя Федор, вот черта с два они все сразу видны. Где ты видел одноуровневый гуй, а?

    А Пол прав на все 100.

Оставьте комментарий!

Не регистрировать/аноним

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Зарегистрировать/комментатор

Для регистрации укажите свой действующий email и пароль. Связка email-пароль позволяет вам комментировать и редактировать данные в вашем персональном аккаунте, такие как адрес сайта, ник и т.п. (Письмо с активацией придет в ящик, указанный при регистрации)

(обязательно)


⇑ Наверх
⇓ Вниз