Процесс разработки ПО

Процесс разработки ПО под «Сивелькирией» отличается от такового под другими ОС (Windows, Linux, Android и т. д.), поскольку разработчики во всех случаях готовят общие компоненты, конкретный сценарий использования которых на момент разработки неизвестен. Иными словами, разработка ведётся так, словно во всех случаях разрабатываются библиотеки и никогда — приложения.

Ни один модуль не может взять на себя несвойственные ему функции. Ни один модуль не может жёстко требовать или неявно предполагать, что он будет взаимодействовать именно с тем модулем, который подразумевал разработчик или с которым он был протестирован при разработке. Таким образом, модуль заведомо не имеет зависимости от версии любого другого модуля, что предотвращает возникновение проблемы ада зависимостей. Ещё раз подчеркнём, что в рамках «Сивелькирии» происходит отказ от парадигмы приложений, в том числе — как программ, состоящих из заранее определённого набора модулей.

При этом модуль может определять, через какие интерфейсы он производит взаимодействие с другими модулями. Кроме того, он может требовать и рекомендовать, чтобы для модуля-контрагента проходили конкретные тесты, представленные в центральном репозитории. От модуля не требуется всегда использовать последнюю версию каждого интерфейса — он может использовать любую поддерживаемую версию, а приведением версий занимается операционная система.

В том, что касается языков и сред, «Сивелькирия» предоставляет ту же гибкость, что и другие операционные системы. Модуль может как содержать машинный код, так и байт-код или интерпретируемый код. При этом для разных типов кода будут использоваться разные загрузчики, сами являющиеся модулями. Их задачей будет обеспечение выполнения кода модуля и прохождения вызовов и данных через его границы, а также выполнения необходимого обслуживания (например, уборки мусора). Благодаря такому подходу планируется поддержать большое количество языков (как интерпретируемых, так и компилируемых) и сред. В то же время, ограничения, установленные операционной системой, применяются к модулю независимо от языка и способа загрузки, так как любой загрузчик в конечном итоге взаимодействует с операционной системой через вызовы интерфейсных методов, разрешения для которых контролируются универсальным образом.

Концепцию динамических библиотек в «Сивелькирии» практически полностью заменяет концепция модулей. Один либо несколько модулей, распространяемых вместе, могут при необходимости выносить часть кода в общую библиотеку, однако ни один другой модуль, не входящий в данный комплект поставки, не сможет получить к ней доступ. Проблема поиска общей библиотеки также решается тем, что во всех случаях используется именно та библиотека, которая входит в комплект поставки. Любые другие взаимодействия с общим кодом происходят через систему модулей.