---
title: "Проекты FreeBSD на лето"
sidenav: developers
---

include::shared/authors.adoc[]

= Проекты FreeBSD на лето

Проект FreeBSD с удовольствием принял участие в программе http://code.google.com/summerofcode.html[Summer of Code 2005] компании Google. В её рамках предполагается оказать финансовую поддержку студентам, которые будут участвовать в проектах с открытым кодом в течение летних каникул.

* <<ideas,Примеры предложенных идей>>
** <<p-userland,Пользовательские программы / Инструменты установки>>
** <<p-filesystem,Файловая система>>
** <<p-networking,Сетевые возможности>>
** <<p-security,Информационная безопасность>>
** <<p-kernel,Ядро>>
* <<mentors,Возможные руководители>>
* <<faq,Часто задаваемые вопросы>>

[[ideas]]
== Примеры предложенных идей

[[p-userland]]
=== Пользовательские программы / Инструменты установки

* *Интеграция с BSD Installer*: Подготовка прототипа для интеграции с http://www.bsdinstaller.org/[программой установки BSD], чтобы полностью заменить устаревшую программу sysinstall, используемую во FreeBSD. Уже было выполнено достаточно много черновой работы, так что любой человек с достаточными знаниями за несколько месяцев может сделать в этой области много хорошего, особенно при соответствующем руководстве более опытных разработчиков FreeBSD.
* *Встроенная программа установки через PXE*: Было бы замечательно иметь встроенную возможность выполнять установку через PXE. Это позволило бы создать установочный сервер на базе CDROM с FreeSBIE на одной машине, указать в BIOS других компьютеров на загрузку с PXE, и выполнить оставшиеся действия как по мановению волшебной палочки. Это очень помогло бы при разворачивании кластерных узлов и тому подобных задачах.
* *Полностью интегрированный мониторинг SNMP*: Подключаемые модули для нашей технологии BSNMP для мониторинга отдельных состояний системы, в частности, загрузки, дискового пространства, статистики по виртуальной памяти, энтропии, правилам сетевого экрана и его состоянии, очередям и отказам/подтверждениям sendmail и подобным вещам. Клиент SNMP, который мог бы собирать и централизовать снимаемые данные, обрабатывать их и так далее. Координируют {philip}, {glebius}, {harti} и {rwatson}.
* *Интеграция поддержки Xen*: Поддержка http://www.cl.cam.ac.uk/Research/SRG/netos/xen/[монитора виртуальной машины Xen] включается во FreeBSD -CURRENT, поэтому установочная программа должна быть обновлена, чтобы могла быть возможна установка системы Xen с несколькими узлами FreeBSD и так далее.
* *Переписать CVSup на C*: http://www.cvsup.org[CVSup] представляет собой ориентированную на CVS сетевую систему общего назначения для распространения файлов. Она массово использовалась около 10 лет для распространения CVS-дерева FreeBSD между зеркалами по всему миру. CVSup была написана на Modula-3 и её реализация на языке C позволит улучшать эту систему большему количеству пользователей. Архитектура CVSup является многопоточной, так что претендент должен иметь некоторый опыт работы с pthreads. Дополнительными требованиями является понимание хранилищ исходных текстов Subversion и Perforce. На данный момент часть работ по написанию и проектированию уже выполнена. Дополнительная информация об этом проекте находится http://mu.org/~mux/csup.html[здесь]. Координатором является {mux}.
* *Улучшение нашей системы регрессивного тестирования*: Ник Клэйтон создал инфраструктуру проведения регрессивных тестов при помощи языка Perl. Большее количество тестов должно работать с libtap. В основном здесь две части. Во-первых, многие из существующих тестов должны вместо assert() использовать ok() и близкие вызовы из libtap. Во-вторых, нужно написать большее количество регрессивных тестов. К этой работе приглашаются студенты, знакомые с языками написания скриптов и тестированием программного обеспечения. Координатором является {nik}.
* *Отслеживание производительности во времени*: Одной из больших проблем проекта масштаба FreeBSD является мониторинг изменений в характеристиках производительности с течением времени. Для этого требуется несколько вещей. Среди них набор соответствующих тестов, оборудование для их запуска, база данных для хранения результатов и программное обеспечения для извлечения интересующих нас результатов и их выдачи. Решение этих проблем в целом, видимо, выходит за рамки работы на лето, однако интересующая нас часть может быть выполнена. Координатором является {brooks}.

[[p-filesystem]]
=== Файловая система

* *Журналирование UFS*: Добавление журналирования и функций воспроизведения для файловой системы UFS. Целью является повышение надёжности файловой системы и значительное снижение необходимости проведение полной проверки 'fsck' после сбоя или отключения электроэнергии. Это проект, который будет иметь дело не только с внутренним устройством файловой системы, но и систем виртуальной памяти и буферизации/кэширования, так что это прекрасная возможность изучить многие фундаментальные аспекты операционной системы. +
Работа над этой задачей уже ведётся, но дополнительная помощь всегда нужна и будет приветствоваться. Кандидаты должны иметь хотя бы поверхностное представление о структурах данных файловой системы (i-узлы, свободные списки, каталоги) и сильное желание больше узнать о таких системах. Этот проект станет существенным пунктом любого резюме, но он не для слабых людей. Координатором является {scottl}.
* *Autofs*: Создание файловой системы autofs по её описанию. Кандидаты должны обладать некоторыми знаниями в области файловых систем, в том числе сетевых. Основная масса работ выполнена, однако транспорт уровня ядра и взаимодействие с автомонтировщиком "amd" ещё требуют завершения. Координирует работы {alfred}.
* *Менеджер логических томов*
* *Волшебные символические ссылки*: Реализовать волшебные символические ссылки. Кандидаты должны обладать некоторыми знаниями о файловых системах. Имеются экспериментальные http://www.freebsd.org/~jwd/magiclinks.tgz[патчи] для 4-STABLE, хотя нужно будет изучить реализацию DragonFly в виде утилиты setvar. Координатором может быть {jwd}.

[[p-networking]]
=== Сетевые возможности

* *Устройство, реализующее сетевой диск*: Добавить возможность удалённого доступа к устройствам из одной машины к другой. Целью является обеспечения удалённого доступа к таким ресурсам, как диски, звуковые адаптеры и другое оборудование, по сети. Перспективные кандидаты должны понимать или иметь интерес к системам удалённого вызова функций, сетевым возможностям (TCP/IP), быть заинтересованными в изучении того, как работают драйверы устройств Unix, будет требоваться также знание управления процессами. Этот проект станет хорошим вкладом в резюме, но но не для слабых людей. Координированием занимается {alfred}.
* *NFS Lockd (усиление семантики)*: Улучшение работы NFS lockd во FreeBSD. Apple внесла определённые улучшения, которые могут быть и в нашем коде. Реализовать восстановление состояния в lockd. Кандидату предстоит изучить, как переносить код из одного ядра в другое, а также отслеживать состояния на стороне клиента. Этот проект будет хорошим дополнением к резюме. Координирует работу {alfred}.
* *NFS Lockd (реализация на уровне ядра)*: Улучшение семантики работы NFS lockd во FreeBSD. Перенос реализации lockd в ядро обещает несколько существенных улучшений как в производительности, так и семантике. Кандидаты должны иметь хорошее представление об NFS, блокировке, RPC и работе с сетью на уровне ядра. Это прекрасное дополнение к резюме, взваливающее на вас обязанности "знания NFS" на всю оставшуюся карьеру, и эта работа не для слабых людей. Координацию работ выполняет {alfred}.
* *Упорядочивание пользовательского/системного интерфейса (net/if_var.h)*: Более _восьми_ лет назад объявления функций сетевого интерфейса были разделены на net/if.h и net/if_var.h. Это было сделано для того, чтобы net/if_var.h присутствовал только в ядре, а net/if.h содержал общедоступные интерфейсы. На сегодняшний день внутренний заголовок, net/if_var.h, всё ещё включается во многие пользовательские приложения. В некоторых случаях это случается из-за интерфейсов, которые на самом деле не являются внутренними для ядра. В других случаях эти структуры использовались вместе с libkvm для прямого обращения к информации ядра. Этот проект должен решить оба типа проблем, в первую очередь за счёт переписывания команды netstat(1) и любых других, работающих с сетью и использующих libkvm, так, чтобы они использовали альтернативные пользовательские интерфейсы, при необходимости их нужно будет создавать. Функции netstat по анализу аварийных дампов, вероятно, нужно будет выделить в отдельную программу. Координацией занимается {brooks}.
* *Перенос Web100 на FreeBSD*: Проект http://www.web100.org/[Web100] был начат для решения проблем с производительностью TCP при работе поверх длинных и толстых сетевых каналов. В рамках проектах был создан интересный набор патчей для Linux для тонкой настройки и мониторинга, и они обеспечивают значительно лучшую производительность в этой области. Интеграция этой работы во FreeBSD может дать значительные преимущества в плане производительности TCP при определённых средах эксплуатации. Для возможностей Web100 должны быть созданы и интегрированы в систему соответствующие абстракции FreeBSD. Влияние этих изменений на производительность должно быть проверено до того, как они будут внесены в систему. Идеальный кандидат для выполнения этой работы имеет некоторые знания об операциях протокола TCP и знаком с с интерфейсами ядра. Координацию осуществляет {brooks}.
* *Поддержка NAT в ipfw2 и улучшения libalias*: Включенный во FreeBSD межсетевой экран ipfw2 на данный момент не поддерживает NAT на уровне ядра, хотя его архитектура предусматривает расширение и базовый механизм динамического создания правил и их просмотра в ядре уже присутствует. Одновременно с этим пользовательский NAT поддерживается в библиотеке libalias, которая недавно была преобразована в модуль ядра. У проекта две следующие цели:
** создание механизма для вызова LibAlias из ipfw2
** пересмотр LibAlias для улучшения её структур, в частности:
*** применять, исследовать и, возможно, оптимизировать базовые операции (создание сеанса, поиск и уничтожение; восстановление tcp-потока);
*** обеспечить механизм регистрации/отключения обработчиков протоколов вместо манипуляции с исходным кодом;
*** улучшить соответствие структуры данных ядра и libalias для возможного снижения количества копий.
+
Указанное выше относится к 5.x и -current, а возможно также и к 4.x. Претенденты должны быть знакомы с вопросами работы сети, связанными с NAT, а также стеком сетевых протоколов ядра. Координирует работы mailto:rizzo@icir.org[Luigi Rizzo].

[[p-security]]
=== Информационная безопасность

* *SecureMines*: Добавить в систему мета-данные, позволяющие отлавливать нарушителей и вести журнал аудита системы. Целью этого проекта является создание нескольких способов обозначения некоторого события как стороннего действия (например, открытие файла-ловушки), которое приводит к остановке системы и выдаче максимального количества информации. Среди возможностей рассматривается использование расширенных атрибутов для пометки таких "мин". Кандидаты должны иметь представление о модели процессов в Unix. Координацией занимается {alfred}.
* *SEBSD*: SEBSD является переносом модели информационной безопасности NSA из SELinux FLASK/TE в операционную систему FreeBSD при помощи технологии MAC из TrustedBSD. На данный момент система находится в экспериментальном состоянии, для одного или нескольких студентов стало бы хорошим проектом посвятить лето её переводу из состояния экспериментального прототипа к чему-то, что можно реально использовать. Сюда может быть включена работа по разработке политики, интеграции SEBSD компоненты установочной программы, адаптация пользовательских компонентов, пилотное внедрение, документирование и так далее. Кандидаты должны иметь некоторый опыт в области технологий контроля доступа, особенно мандатного способа управления; опыт работы с альтернативными моделями информационной безопасности будет плюсом, как и опыт участия в разработке ОС. Однако работа здесь имеет разный уровень, все предложения будут рассмотрены! Координированием занимается {rwatson}.

[[p-kernel]]
=== Ядро

* *Обновления Linuxulator*: FreeBSD обеспечивает двоичную совместимость с Linux за счёт применения таблицы системных вызовов Linux, которая применяется при исполнении бинарных файлов Linux в формате ELF. Эта реализация должна быть проверена на соответствие современным ядрам Linux, недостающие важные системные вызовы могут быть добавлены для обеспечения работы всех основных приложений во FreeBSD. Студент должен уметь читать и понимать чужой код на языке C, писать код на C и иметь хорошее представление о том, как повторно реализовать код GPL в чистых условиях (без копирования и вставки кода!).
* *Реализация пассивного охлаждения в ACPI*: Для охлаждения процессора должен использоваться интерфейс cpufreq, основанный на различных настройках _PSV. Кроме того, нам необходимо реализовать различные интервалы опроса для температурных зон, что основано как на пассивных настройках, так и на опросах, явно задаваемых в ASL. Этот проект требует хорошего знания C, понимания программно/аппаратного интерфейса, наличия лэптопа, работающего с ACPI, и работы с ядром. Координацией занимаются {njl} и {bruno}.
* *Остановка со сбросом на диск*: Реализовать механизм остановки/восстановления с использованием диска. Возможно использование функций создания дампа для сброса страниц памяти на диск, затем обращение к ACPI для перевода системы в состояние S4 или выключения питания. Восстановление потребует изменений в загрузчике, обеспечивающих прямую загрузку образа памяти и продолжения выполнения. Этот проект требует хорошего знания C, понимания программно-аппаратного интерфейса, наличия лэптопа, работающего с ACPI, и работы с ядром. Координацию работ выполняют {njl} и {bruno}.
* *Реализовать и замерить характеристики различных алгоритмов для powerd(8)*: Реализовать ряд алгоритмов предсказания (а возможно, создать собственные) и замерить их характеристики на предмет энергопотребления и потери производительности. Лучшим алгоритмом будет тот, что экономит максимальное количество энергии с наименьшими потерями производительности. Требует базовых знаний языка C, наличия лэптопа, поддерживаемого cpufreq(4) (предполагается современный процессор Pentium-M) и некоторых знаний статистики. Координацию осуществляют {njl} и {bruno}.
* *Мета-язык ядра*: Разработка диалекта языка C, упрощающего написание кода ядра. В нём должны присутствовать расширения языка, позволяющие писать более ясный для понимания код ядра и с меньшим количеством ошибок. Примером может служить языковая поддержка связных списков, устраняющая необходимость в запутанных MACRO. Координируют работу {gnn}и {phk}. Статья Wiki с более полной информацией доступна http://wikitest.freebsd.org/moin.cgi/K[здесь].
* *Подключаемые дисковые планировщики*: В рамках проекта нужно создать механизмы реализации подключаемых планировщиков дисков, взамен стандартной элеваторной схемы, используемой во FreeBSD, а затем реализовать по крайней мере один альтернативный механизм (к примеру, варианты с пропорциональным распределением и тому подобные схемы) для демонстрации эффективности нового интерфейса. Претенденты должны быть знакомы с теорией планирования работы с диском и, в некоторой степени, с программированием ядра. Координатором выступает mailto:rizzo@icir.org[Luigi Rizzo].

Дополнительные проекты можно найти, просмотрев страницу link:../../[Разрабатываемых проектов FreeBSD] или некоторые из последних link:../../news/status[Отчётов о ходе работ].

[[mentors]]
== Руководители

Если вы хотите принять участие в проекте, который здесь в явном виде не указан, вы можете обратиться к одному из потенциальных руководителей, указанных ниже, для того, чтобы составить предложение в одной из следующих больший категорий.

* *Сетевые возможности*: {alfred}, {brooks} и {sam}
* *Файловые системы*: {scottl}, {alfred}
* *GEOM*: {phk}
* *Подготовка релизов / Интеграция*: re@FreeBSD.org
* *TrustedBSD / Информационная безопасность*: {rwatson}
* *Подключаемые дисковые планировщики*: {luigi}.
* *ACPI*: {njl} и {bruno}.
* *Звук*: {matk}.

Если ваш проект не был выбран компанией Google для финансирования, но вы всё же полагаете, что ваш проект этого заслуживает, сообщите об этом по электронной почте в адрес proposals@FreeBSD.org.

[[faq]]
== Часто задаваемые вопросы

* *Подойду ли я?*
+
Пожалуйста, обратитесь к http://code.google.com/summfaq.html[FAQ для участников] компании Google для решения всех вопросов, касающихся требований к участникам.
* *Как написать заявку?*
+
Фонд Perl имеет хороший документ http://www.perlfoundation.org/gc/grants/proposals.html[HOWTO], описывающий как написать заявку на разработку с открытым кодом.
* *Когда истекает срок подачи заявок?*
+
Заявки должны быть получены Google до 14 июня.
