unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: ludo@gnu.org (Ludovic Courtès)
To: Andy Wingo <wingo@igalia.com>
Cc: guix-devel@gnu.org
Subject: Re: Service refactoring
Date: Tue, 08 Sep 2015 12:12:03 +0200	[thread overview]
Message-ID: <87mvwxmd8s.fsf@gnu.org> (raw)
In-Reply-To: <87fv2pe1qx.fsf@igalia.com> (Andy Wingo's message of "Tue, 08 Sep 2015 10:47:34 +0200")

Andy Wingo <wingo@igalia.com> skribis:

> On Sun 06 Sep 2015 23:23, ludo@gnu.org (Ludovic Courtès) writes:
>
>> Service types and their “extends” relations form a DAG
>
> I am not sure how much ordering matters.  The reason is that the
> "extends" relations actually proceed from packages associated with a
> service, not the service itself.  It's enough to know the set of
> services and their associated extends; ordering does not appear to be
> important.  Of course we could do a topological sort on services for
> some other reason, but we don't actually need to for these purposes.

My intent was more to make relations among services explicit, rather
than specify some ordering.

> I think a two-phase configuration can work: one, in which we specify
> services like this:
>
>   (operating-system
>    ...
>    (services SERVICES))
>
> and a second in which the services are "finalized".  Finalization is a
> monadic procedure of type SERVICE SERVICES -> SERVICE.  Finalization is
> where e.g. udev would grovel the SERVICES to collect all udev extends.

It would work, yes.  But I think there’s a couple of issues worth
addressing.

An issue is that each finalization procedure is passed more information
than strictly needed.  Thus, any service can potentially influence any
other service’s configuration, which makes it harder to reason about
service composition.

Another problem is that it’s not really extensible: we’ll have to keep
adding new fields to <service> every time we think of a new way a
service needs to extend another service.  We could use an alist instead
of those record fields, but then that would make the thing sloppy (typos
would go undetected, etc.)

There’s also the assumption that each service that the user specifies
maps to a dmd service, which is not always the case (D-Bus services,
Apache modules, etc.)

Lastly, without making the “extends” relations explicit, it’s easy to
end up specifying an extension that actually extends nothing.  For
instance, you use a service that has a non-empty ‘dbus-services’ field
but forget to use the D-Bus service; Guix has no way to tell that
something’s missing.

What I suggested would address these by constraining things.  What
remains to be seen is if this can be implemented without making things
too complex.  I’ll try to experiment with this.

Thanks,
Ludo’.

  reply	other threads:[~2015-09-08 10:12 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-03 21:23 [PATCHES] Get elogind-service working as intended Mark H Weaver
2015-09-04  7:57 ` Andy Wingo
2015-09-06 21:23   ` Service refactoring Ludovic Courtès
2015-09-08  8:47     ` Andy Wingo
2015-09-08 10:12       ` Ludovic Courtès [this message]
2015-09-08 10:33         ` Andy Wingo
2015-09-08 14:48     ` Mark H Weaver
2015-09-10 16:05       ` Ludovic Courtès
2015-09-10 16:14       ` Ludovic Courtès
2015-09-20 15:42     ` Ludovic Courtès
2015-09-21  8:18       ` Andy Wingo
2015-09-21 16:00         ` Ludovic Courtès
2015-09-24  0:33           ` Thompson, David
2015-09-24  7:41             ` Ludovic Courtès
2015-09-24  9:33               ` 宋文武
2015-09-24 17:09                 ` Ludovic Courtès
2015-09-25 22:50               ` Christopher Allan Webber
2015-09-26 12:50                 ` Ludovic Courtès
2015-09-30  8:59       ` Ludovic Courtès
2015-10-10 21:01         ` Ludovic Courtès
2015-09-10 16:03 ` [PATCHES] Get elogind-service working as intended Ludovic Courtès

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87mvwxmd8s.fsf@gnu.org \
    --to=ludo@gnu.org \
    --cc=guix-devel@gnu.org \
    --cc=wingo@igalia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).