Невозможно отучить людей изучать самые ненужные предметы.
Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3
Надо знать обо всем понемножку, но все о немногом.
Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы
Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)
Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода
Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5
Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости
Справочник от А до Я
HTML, CSS, JavaScript
Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы
Помогли мы вам |
Проект был ведущим поставщиком компонентов UNIX-подобных ОС, но большая часть новшеств в разработке дистрибутивов GNU/Linux появлялась в не связанных с GNU и FSF проектах, а их собственные дистрибутивы вроде gNewSense не представляли особого интереса. Чаще всего они были вариантами других дистрибутивов, очищенными от всего несвободного кода.
Многие участники проекта GNU, включая основателя проекта Ричарда Столлмана, также отличались любовью к языкам семейства лисп. Неудивительно, если вспомнить, что основатели проекта работали в лаборатории искусственного интеллекта в MIT вместе с разработчиками лисп-машин. При этом в самих операционных системах языки семейства лисп не занимали особого места со времен тех самых лисп-машин — их роль ограничивалась приложениями.
Проект GNU Guix (произносится geeks) меняет дело на обоих фронтах. Это не производная другого дистрибутива, а независимый дистрибутив со своим менеджером пакетов и Scheme — языком семейства лисп — в качестве системного скриптового языка.
В качестве системы управления сервисами Guix использует не SysV init и не systemd, а GNU sheperd, который произошел из GNU/Hurd и также поддерживает Scheme в качестве языка описания сервисов.
Тем не менее Guix появился не на пустом месте. Пакетный менеджер Guix основан на части кода Nix, расширяет его идеи и добавляет поддержку Scheme в качестве языка описаний пакетов и конфигураций.
Прежде чем обсуждать Guix, нужно кратко упомянуть о прогрессе в управлении пакетами и пионере их реализации — пакетном менеджере Nix.
Все популярные дистрибутивы используют отработанную еще в девяностых схему управления пакетами. У каждого пакета есть версия, в каждый момент в системе может быть только одна версия каждого пакета, обновление пакета требует обновления всех его зависимостей.
Эта схема гораздо лучше тех, когда каждый пакет поставляется вместе со всеми зависимостями или когда все управление зависимостями остается на совести пользователя. Однако у нее есть существенные недостатки.
Эти проблемы обычно решаются обходными путями — контейнерами, виртуальными окружениями, снимками файловой системы. Лучшие ли это решения из возможных? Есть ли способ разобраться с проблемой на уровне управления пакетами? Авторы Nix задались целью выяснить это экспериментально.
Все установленные пакеты Nix устанавливаются в отдельные каталоги с хешем пакета в имени вроде /nix/store/b6gvzjyb2pg0kjfwrjmg1vfhh54ad73z-firefox-33.1/
. При этом в отличие от AppImage и подобного, где все зависимости хранятся вместе с приложением, одни пакеты Nix вполне могут служить зависимостями для других. Поскольку разные версии изолированы друг от друга, обновление одного пакета и его зависимостей никогда не сломает другие пакеты. Как в контейнерах, но с меньшим расходом места на диске за счет общих зависимостей.
Кроме того, обновление системы — атомарная операция. Если во время обновления выдернуть кабель питания, система после перезагрузки окажется в состоянии как до начала обновления. Более того, обновление можно откатить назад.
Что это — будущее управления пакетами или тупиковый путь? Говорить об этом пока рано. Сейчас контейнеры в моде и у Docker есть финансовая поддержка крупных компаний, в то время как исследования управления пакетами и разработка новых дистрибутивов держатся на голом энтузиазме.
Scheme — язык РёР· семейства Lisp. Рто семейство весьма велико, Рё его языки объединяет, РїРѕ сути, РѕРґРЅРѕ общее свойство — тождественность РєРѕРґР° Рё данных, Р° значит, Рё неограниченно расширяемый синтаксис. Язык Clojure РІРѕ РјРЅРѕРіРѕРј построен именно РЅР° идеях Scheme, Р° РЅРµ Common Lisp.
При этом сам Scheme оставался широко известным языком, но редко применялся на практике. Его использует культовая книга Structure and Interpretation of Computer Programs, но на нем не написано ни одной сколько-нибудь популярной программы.
Некоторые программы поддерживают его в качестве скриптового, в частности графический редактор GIMP поддерживает Scheme и Python. Но этим все и ограничивается.
Так что дея использовать Scheme как фундаментальную часть ОС выглядит весьма радикально, но авторы Guix решились. Давай посмотрим, что из этого вышло.
Установка в VirtualBox не представляет никакой сложности. При загрузке с ISO нас встречает вполне типичный псевдографический установщик — на этом этапе заметить отличия от других дистрибутивов сложно.
Если ты решишься попробовать на физическом железе, нужно учитывать, что разработчики Guix — члены FSF, а значит, в поставке по умолчанию отсутствуют все несвободные драйверы и прошивки.
Под конец установки пользователь начинает понимать, куда попал, — нам советуют искать базовые настройки в /etc/config.scm
и показывают файл с выбранными при установке настройками.
Этот файл — скрипт на языке Scheme и хранит указанные при установке настройки в виде S-выражений.
;; This is an operating system configuration generated
;; by the graphical installer.
(use-modules (gnu))
(use-service-modules desktop networking ssh xorg)
(operating-system
(locale "en_US.utf8")
(timezone "America/Anchorage")
(keyboard-layout (keyboard-layout "us"))
(host-name "guix")
(users (cons* (user-account
(name "xakep")
(comment "Xakep")
(group "users")
(home-directory "/home/xakep")
(supplementary-groups
'("wheel" "netdev" "audio" "video")))
%base-user-accounts))
(packages
(append
(list (specification->package "nss-certs"))
%base-packages))
(services
(append
(list (service xfce-desktop-service-type)
(service openssh-service-type)
(set-xorg-configuration
(xorg-configuration
(keyboard-layout keyboard-layout))))
%desktop-services))
(bootloader
(bootloader-configuration
(bootloader grub-bootloader)
(target "/dev/sda")
(keyboard-layout keyboard-layout)))
(swap-devices (list "/dev/sda2"))
(file-systems
(cons* (file-system
(mount-point "/")
(device
(uuid "8f368be5-0dee-4bcc-b9d2-54c8f36a77ab"
'ext4))
(type "ext4"))
%base-file-systems)))
Главное преимущество языков семейства лисп — расширяемый синтаксис. В этом файле operating-system
и прочее — не ключевые слова языка или формата файла, а всего лишь макросы Scheme.
Но пока мы оставим его в стороне и посмотрим на установку пакетов из репозиториев.
|
|