[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Ghm-discuss] Fosdem: speakers, please make your presentations avail
From: |
Alex Sassmannshausen |
Subject: |
Re: [Ghm-discuss] Fosdem: speakers, please make your presentations available! |
Date: |
Tue, 29 Aug 2017 12:03:57 +0200 |
User-agent: |
mu4e 0.9.18; emacs 25.2.1 |
And of course, that should be GHM 2017, not FOSDEM. That's a weird slip
of the tongue on my part…
Alex
Alex Sassmannshausen writes:
> Hello everyone,
>
> I had a great time over the weekend, thank you all for being part of the
> event once more!
>
> Chris is working to make the recordings of the talks available as soon
> as possible, and to this end, it would be very beneficial if we could
> have access to the presentation materials everyone used.
>
> Please could you reply to this email with the presentations attached?
>
> Best wishes,
>
> Alex
>
> PS: To make a start, Chris, attached as an org mode file.
> #+TITLE: Using Potluck to break the Guile stalemate
>
>
>
>
>
>
> Alex Sassmannshausen
>
> * Guix Potluck: what is it?
>
> + Over the period of March and April, Andy Wingo wrote an extension
> to Guix that was inspired by discussions around Guix Channels
> during Fosdem.
>
> + The resulting code, according to email discussions on the
> guix-devel mailing list, fulfills the following roles:
>
> + provide a more decentralized way of developing "Guix packages"
>
> + provide a complement to the current set
>
> + provide a sloppy way to share projects, via Guix, that are still
> prototypes / work in progress
>
> + the explicit stated collection would be unplanned, would contain
> duplicates, and be entirely the result of user contributions
>
> * Small detour: problem space.
>
> - Guile has hitherto not had a great way to share user created
> libraries, modules & applications.
>
> - Guix could provide an easy way to solve this problem.
>
> * Scenario: I have a small Perl library
>
> - It follows standard Perl conventions
>
> - Guix has a Perl build system that, in this case, should just do
> the right thing.
>
> - I have never worked with Guix, let alone Lisp.
>
> - I want to leverage the awesome of Guix.
>
> - I've installed Guix! :-DDDDDDDDDDDDD
>
> - Now, all I have in front of me is an empty text file…
>
> ^---- This is the problem I'm concerned about
>
> * After Ludo's talk: let's revisit the Guix package specification
>
> (define-module (gnu packages hello)
> #:use-module (guix packages)
> #:use-module (guix download)
> #:use-module (guix build-system gnu)
> #:use-module (guix licenses)
> #:use-module (gnu packages gawk))
>
> (define-public hello
> (package
> (name "hello")
> (version "2.10")
> (source (origin
> (method url-fetch)
> (uri (string-append "mirror://gnu/hello/hello-" version
> ".tar.gz"))
> (sha256
> (base32
>
> "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
> (build-system gnu-build-system)
> (arguments '(#:configure-flags '("--enable-silent-rules")))
> (inputs `(("gawk" ,gawk)))
> (synopsis "Hello, GNU world: An example GNU package")
> (description "Guess what GNU Hello prints!")
> (home-page "http://www.gnu.org/software/hello/")
> (license gpl3+)))
>
> * Looking through fresh eyes… (perhaps)
>
> (define-module (gnu packages hello) \
> #:use-module (guix packages) \
> #:use-module (guix download) \ Requires knowledge of
> Guix module structure
> #:use-module (guix build-system gnu) /
> #:use-module (guix licenses) /
> #:use-module (gnu packages gawk)) /
>
> (define-public hello
> (package <----- Package record is nice to read, tricky
> to write in the beginning
> (name "hello")
> (version "2.10")
> (source (origin
> \ What is an origin?
> (method url-fetch)
> \
> (uri (string-append "mirror://gnu/hello/hello-" version
> \
> ".tar.gz"))
> |
> (sha256
> |
> (base32
> |
>
> "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i")))) | How do I
> generate this?
> (build-system gnu-build-system)
> - Which one should i use?
> (arguments '(#:configure-flags '("--enable-silent-rules")))
> (inputs `(("gawk" ,gawk)))
> - Linked to module structure
> (synopsis "Hello, GNU world: An example GNU package")
> (description "Guess what GNU Hello prints!")
> (home-page "http://www.gnu.org/software/hello/")
> (license gpl3+)))
>
> * Is Guix Potluck a solution?
>
>
>
> Let's investigate!
>
>
> Let's take it for a ride!
>
>
> * Let's do it!
>
> My WIP: Guile Config
> (changed scenario: simple Guile module)
>
> $ cd /to/project/dir
> $ guix potluck init https://gitlab.com/guile-projects/guile-config \
> --autotools --license=gpl3+
> $ guix build --file=guix-potluck/config
> $ guix potluck update https://gitlab.com/guile-projects/guile-config
>
>
> * Well that's nice and easy!
>
> - OK:
> + we don't have a guile build system.
> + The GNU build system is bewildering as a new comer!
> - Let's ignore those problems for now.
>
> - Main points:
> + we did not start with an empty page!
> + we did not need to know where inputs are located!
> + we have access to licenses & build-systems!
> + most of the package is written for us!
>
> * Change of scene: How is Potluck implemented?
>
>
>
>
> There are two parts.
>
> * Guix client side
>
> - A WIP branch in the Guix repository
>
> - Implements a subcommand, `guix potluck`
> - Which uses Guix modules to allow the module contributor to
> generate a “potluck package“ — a simplified guix package.
> - Which can also "install" a repository containing a “potluck
> package“ in a potluck server.
>
> * Server side
>
> - A guile server which can be passed a reference to a repository
> containing a “potluck package“.
>
> - It tries to build this package
>
> - Then adds it to a local ”source” repository: a giant git
> repository of user contributed ”potluck packages”
>
> - Then transforms the package into a ”guix package”, which is then
> added into a giant git repository of compiled ”potluck packages”:
> a repository of ”guix packages”.
>
> * How it can be used
>
> There are two user roles
>
> * The module producer
>
> - The person who wishes to contribute a module to the potluck
> repository.
>
> - They use the potluck subcommand to generate and upload a potluck
> package.
>
> * The module user
>
> - The person who wishes to use packages that were submitted to the
> potluck repository.
>
> - They clone the potluck guix package repository inside a directory
> made accessible to Guix using GUIX_PACKAGE_PATH.
>
> - They use the normal guix commands to install any packages from
> the potluck repository.
>
> * How can this benefit Guile [some background!]
>
> Guile has historically not had an effective way of distributing user
> contributed code.
>
> Previous attempts have revolved around:
> - Guile-Lib
> - Guile-Core
> - Dorodango/Guildhall
>
> The first doesn't scale, the second would accept only very high
> quality code. The third never took off.
>
> * Guix' impact on Guile
>
> Guix has caused the Guile community to grow. I would argue that we
> have more Guile packages in Guix than in any previous attempt at
> providing a Guile package manager.
>
> How do we:
> a) make it easier for people to package Guile packages?
> b) accelerate the process by which we make Guile packages
> discoverable through guix?
>
> Some conclusions so far in general terms!!!!!!111111
>
> * Potluck as a solution to (a)
>
> Potluck provides a semi-interactive script to generate guix package
> like templates.
>
> They can be populated fairly easily by the module
> maintainer, making generating Guix compatible packages easier for
> non-Guix users.
>
> * Potluck as a solution to (b)
>
> Potluck packages generated can be shared instantly, without going
> through a QA process.
>
> They can then be discovered by anyone doing a git clone of the
> resulting repository: the packages become searchable by Guix.
>
> * Potluck as staging for Guix
>
> Once a package attains maturity, migrating from Potluck to Guix
> should be easy: the hard work has already been done.
>
> * What makes Potluck nice & easy to use?
>
> - Potluck init avoids the “empty page“ situation.
>
> - The Potluck package specification avoids the need to specify exact
> package variables, freeing the user from having to know the Guix
> packages file structure.
>
> - Potluck update makes making a package discoverable easy.
>
> * Potluck as the solution to the Guile stalemate?
>
>
> - Potluck feels lovely to use:
>
> + init feels like it provides a clear user journey with instructions
>
> + upload has a very docker registry like feel about it in terms
>
> + I would argue the UI provides a friendly entry to the Guix
> adventure.
>
> + The potluck initiative is worth pursuing already because of the
> above factors.
>
> * The End?
>
> Well,… maybe.
>
> There are other elements to this discussion (e.g. Guix Channels).
>
> I will ignore those for now.
>
> My main motivation: make Guile/Guix contribution easier.
>
> What follows here are some loose thoughts, not yet backed by code!
>
> (Which means: what Andy created is already infinitely more valuable
> than what I recommend, for lack of code!).
>
> * What could be improvements to Potluck from the beginner's perspective?
>
> - Users should be exposed to full package references as soon as
> possible, so the start getting familiar with it:
>
> - When learning by reading and doing, it is better to study the
> guix package specification directly, rather than yet another format.
>
> - We can reinforce the already existing custom of storing a
> guix.scm file inside project repositories.
>
> - We make the guix package definition, which would eventually be
> used for integration into Guix immediately available to the
> package producer, thuse encouraging a transition from "Guix
> user" to "Guix contributor".
>
> - There is a niche for a simplified package spec for convention
> compliant, first-time Guix package contributions.
>
> * Proposal: extend the init command!
>
> - allow for specifying “inputs“, “synopsis“ & ”description” on the
> command-line.
>
> - allow for different output types: JSON, YaML, messy-Wisp,
> messy-Guile.
> + All these would allow input etc. references as strings, and
> would automatically generate the source specifications.
>
> - provide an importer from JSON, YaML & messy-Wisp & messy-Guile
> packages specifications to Guile package specifications (messy
> importer).
>
> - The result would be a command-line utility that makes it easy to
> generate “guix.scm“ files in any project repo.
>
> * Proposal: make the Potluck server work with package specifications.
>
> - We simplify the server, maintain its Continuous Integration
> capabilities & its decentralised discoverability
>
> - We enhance its supporting role for the Guix package manager by
> encouraging & exposing direct Guix packages.
>
> - We encourage migration to Guix through & Guile by encouraging
> distributed projects to provide a guix.scm file.
>
> NOTE: we still need to generate full Scheme modules on the server,
> to work nicely with GUIX_PACKAGE_PATH. The local guix.scm file
> should not be a module definition: it should just be a file
> returning a package object.
>
> * Proposed workflow
>
> - Within project repo:
>
> ;; guide through initial messy creation
> $ guix spring init --output=json > messy-guix.scm
>
> ;; test build from messy file: trial & error
> $ guix spring build
>
> ;; convert messy to full guix package specification
> $ guix spring import messy-guix.scm > guix.scm
>
> ;; upload/update on discoverable registry
> $ guix spring update guix.scm
>
> * What do we gain?
>
> - Beginners have a command that sets them on the right path
>
> - Newbies can "fill in blanks" in command or simplified template
> without worrying about stringent Guix "type checking", until their
> messy definition works
>
> - Travellers from non lisp-y lands can work in their preferred
> declarative syntax, until it isn't good enough any more
>
> - We encourage adoption of a standard Guix based development workflow
>
> - We make dev projects with a Guix workflow "discoverable"
>
> * The End
>
> - This is a topic with plenty of scope of discussion!
>
> - What do you think?
>
> - Thank you.
>
>
>
> \o/
>
> [Thank you to Ludo & all Guix devs; Thank you to Andy for Potluck!]
>
> * Plan of action
>
> - Inherit GNU build system with autoreconf option
> - New build system: Guile
> - Extend Init:
> + parse input, synopsis, description arguments
> + print to simple-guile
> - Add transform:
> + parse simple-guile, expand to package
> + attempt to build
> + on success, print guix.scm
> + else error meaningfully
- [Ghm-discuss] Fosdem: speakers, please make your presentations available!, Alex Sassmannshausen, 2017/08/29
- Re: [Ghm-discuss] Fosdem: speakers, please make your presentations available!, Ricardo Wurmus, 2017/08/29
- Re: [Ghm-discuss] Fosdem: speakers, please make your presentations available!,
Alex Sassmannshausen <=
- Re: [Ghm-discuss] Fosdem: speakers, please make your presentations available!, Tim Rühsen, 2017/08/29
- Re: [Ghm-discuss] Fosdem: speakers, please make your presentations available!, Darshit Shah, 2017/08/30
- Re: [Ghm-discuss] Fosdem: speakers, please make your presentations available!, Luca Saiu, 2017/08/31