►
Description
Ludovic Courtès discuses the Guix toolbox for Linux package management and Guix-Jupyter project for reproducible data science notebooks.
Gitlab project:
https://gitlab.inria.fr/guix-hpc/guix-kernel
Slides:
https://github.com/scicloj/scicloj/blob/master/resources/slides/scicloj-guix-jupyter.pdf
Recap:
https://scicloj.github.io/posts/2020-03-07-guix-jupyter/
A
Hello,
everybody.
This
is
a
psychologic
number
10.
Psychology
is
a
group
of
people
working
on
open
source
solutions
for
data
science,
enclosure
and
actually
everything
about
data
enclosure.
And
today
we
have
a
special
guest,
Ludovic
Cortez,
who
will
be
speaking
about
geeks
Jupiter
I'm,
not
sure
how
to
introduce
Ludovic,
because
he
has
been
involved
in
so
much
so
many
projects,
both
in
free
software
and
in
academic
research
and
later
Ludovic,
will
present
himself
more
accurately.
A
But
for
now
the
reason
we
were
meeting
Ludovic
is
his
involvement
in
developing
no
guile
the
scheme
dialect
and
Agnew
geeks
the
toolbox
for
deployment
and
amendment
in
Linux
and
geeks
Jupiter.
The
people
do
civil
notebooks
that
we
will
be
hearing
about
today
and
I
think
if
it
is
OK
a
lot
of
it.
Would
you
like
to
present
yourself
a
little
more
sure.
B
Yeah,
thank
you.
Ok.
Well,
thank
you
for
the
introduction
daniela.
Everyone
can
hear
me.
Fine,
yeah,
yes,
okay!
So
well,
thanks
a
lot
for
having
me
today
in
this
web
meeting.
I'm
really
pleased
to
be
able
to
talk
with
all
of
you,
people
I'm,
not
a
closure
person
that
is
not
yet
I'm,
very
interested
in
closure
for
lots
of
reasons.
I'm
a
I'm,
a
schemer
and
there
I'm
pretty
sure
I'm
aware
of
many
lessons.
B
We
can
learn
in
scheme
from
closure
and
many
good
things
that
I've
seen
and
sometimes
I
may
be
jealous
of
these
things
actually,
but
and
I'm
really
happy
to
have
the
opportunity
to
talk
about
reproducibility
and
reproducible
notebooks
to
Peter
notebooks,
because
I
think
it's
it's
Hot
Topic.
So
you
wanted
me
to
introduce
myself
I
guess
which
you
did
pretty
well
I
used
to
work
on
guide,
while
I,
sometimes
work
on
guide,
I'm,
even
official
eco
maintainer
of
guy,
but
I'm,
not
so
active.
B
These
days,
I
spent
most
of
my
hacking
time
on
gigs
and
all
things
geeks,
which
we'll
talk
about
in
a
minute
I've
been
doing
that
for
a
while
now
and
over
the
last
couple
of
years,
I've
been
working
on
gigs
in
the
context
of
reproducible
science,
specifically
on
high
performance
computing,
so
I
work
at
inria,
which
is
a
French
Research
Institute,
and
there
are
quite
a
few
people
here,
working
on
HPC
high-performance
computing
and
they
have
software
deployment
issues
and
they
have
reproducibility
issues.
So
people
are,
you
know,
becoming
aware
of
this
problem.
B
C
Yeah
so
I'm
Martin
I
work
on
the
next
journal
and
yeah
we're
we're
very
interested
in
like
providing
better
reproducibility
for
people
and
I
think
this
is
like
the
whole
reproducibility
problem
is
like
it's.
It's
a
lot
being
talked
about
in
science,
but
it's
actually
like
a
problem
that,
like
every
computer
user,
constantly
experiences
when
people
just
can't
get
software
to
work
as
it
should,
or
to
install
and
yeah
I
feel
like
that.
C
We've
sort
of
reached
like
local
maximum,
with
like
old
solutions
to
this
problem,
or
even
the
newer
solutions
like
like
docker
and
yeah
I'm,
pretty
excited
about
like
these
principled
approaches
that
geeks
and
makes
like
applying
these
functional
principles
to
to
dependency
management
can
bring
like
in
terms
of
a
much
better
user
experience
and
caching
and
performance
down
the
road
and
yeah.
So
pretty
excited
to
to
learn
more
about
get
stupider.
Today,.
D
And
chapo
I
have
a
background
in
computer
science.
I
work
as
a
consultant
I
have
my
own
company
and
I
work,
mostly
in
pharma
and
regulated
industries,
I'm
also
quite
interested
in
reproduce
ability
when
you
work
with
people
with
solutions
where
people's
health
is
on
the
line,
you
need
to
deliver
so-called
systems
and
it's
a
big
and
very
costly
thing
to
understand
exactly
what
systems
to
and
make
sure
they
continue
to
do
so
so
I'm
quite
interested
in
that
subject.
D
A
B
Right
so
yeah
the
way
I
thought
about
structuring
this
meeting
is
by
starting
with
a
with
some
sort
of
a
talk.
So
I'll
explain
the
the
rationale
and
everything
about
geeks
Jupiter
and
then
also
make
some
like
demos.
If
everything
goes
well
and
then
we
can
make
that
interactive.
So
if
you
have
any
question,
you
can
also
interrupt
me
at
any
time
and
I'll
try
to
answer
your
questions
that
work
for
you
all
right.
So
this
is.
This
is
the
first
time
for
me.
I
mean
this.
B
C
B
Okay,
so
you
should
be
seeing
slides
instead
of
my
face
now,
all
right.
So,
let's
see
so
how
did
I
start
looking
at
Jupiter,
so
actually
I'm
I'm,
not
really
a
Jupiter
user,
at
least
not
initially
I'm,
starting
to
use
it
to
be
honest,
I'm
very
much
interested
in
Jupiter,
because
with
the
list
background,
as
you
people
probably
know
it,
I
mean
Jupiter
is
something
we're
quite
used
to
under
a
different
name.
B
We
call
it
a
rep
all
right,
but
that's
that's
pretty
much
the
kind
of
tool
that
really
Spurs
like
to
use
and
so
I'm
I've
been
like
I
said
before
I've
been
following.
You
know
all
the
work
that's
being
done
in
terms
of
reproducible,
science
lately
and
I've
heard
more
about
Jupiter
in
the
context
of
reproducible
science.
So,
for
example,
there
there
are
quite
a
few.
There
are
lots
of
tutorials
on
the
web
on
how
to
do
reproducible
science.
There
are
MOOCs.
B
B
People
start
understand
that
as
scientists
as
scientists,
we
need
to
be
able
to
actually
reproduce
what's
in
the
paper,
and
so
we
need
not
just
the
not
just
the
narrative,
but
also
the
code
that
led
to
those
conclusions,
and
so
Jupiter
is
a
great
progress
in
that
direction.
So
I'm
very,
very
much
enthusiastic
about
this
particular
use
of
Jupiter
and
again
things
like
next
on
all
go
in
the
same
direction
and
I
think
that's
very
good
for
reproducible
science,
but
then,
like
I,
said
I've
been
working
on
on
gifts
for
Ryan
Giggs
is
about.
B
Let
me
see
still
juggling
with
windows.
Kicks
is
about
reproducibility
right,
it's
about
being
able
to
reproduce
computational
environment
to
software
environments.
I
started
wondering
to
what
extent
is
Jupiter
really
about
reproducibility
right.
So,
of
course
you
can
have
cold,
you
can
run
it
and
you
can
produce
figures
and
all
that
and
that's
great,
but
how
to
what
extent
that
is,
that
code
actually
reproducible.
So,
for
example,
when
I
see
a
Jupiter
cell
like
that
one
I
hope
you
can
read
it.
B
C
B
B
B
Otherwise,
it's
not
going
to
work
or
I'm
gonna
get
a
runtime
error
or
I'm
gonna
get
different
results.
You
know
that
kind
of
thing
to
me.
With
my
geeks
background:
it's
it's
really!
It's
really
a
problem.
You
know
you
want
to
be
able
to
make
sure
that
you
can
actually
run
that
code
and
get
the
result
that
the
author
intended
to
produce,
and
so
that's
the
problem
I
and
my
colleague
P
Antoine,
who
be
set
out
to
address
through
geeks.
B
As
you
execute
the
notebook
and
you
well,
you
actually
download
the
arbitrary
code
from
the
internet.
That's
that
doesn't
sound
great.
It
doesn't
sound
very
much
reproducible
either
because
you
don't
really
know
what
what
you're
going
to
install,
because
that
depends
on
the
time
at
which
you
ran
that
PP
install
would
command,
for
example,
so
that
that
sounds
problematic.
B
Alright,
so
yeah
again,
so
people
would
use
pip
install
or
they
would
use
Condor
inside
their
notebook.
Things
like
that
and
I
thought.
You
know
this
is
not
really
gonna
work
in
the
long
term.
Right
Condor
is
not
really
good
at
reproducing
software
environments
in
the
long
term,
either
so
that
that
doesn't
quite
work
and
then
the
the
solution
that
many
people
have
started
using
is
binder.
B
So
if
I,
if
I
write
a
notebook
and
I
share
it
with
you,
so
that
you
can
actually
read
it
on
your
laptop
while
you
still
don't
know
what
to
do
to
run
it
in
in
the
right
sort
of
environment,
that's
kind
of
a
problem,
so
instead
people
share
complete
binder
images
roughly
so
that
they
can
actually,
you
know,
make
sure
they
run
the
notebook
in
the
right
software
environment
right.
So
this
is
the
list
of
instructions
recognized
by
by
binder
and
by
Red
Bull
to
Tucker,
which
is
the
software
that
underlies
binder
roughly
so.
B
So
the
question
we
ask
is
what,
if
notebooks
were
self-contained,
what
if
they
were
deployment
to
where
what?
If
we
could
directly
introduce
software
deployment
information
inside
the
notebook,
so
that,
if
I
share
my
notebook
with
you,
while
it's
self-contained,
you
can
run
it
and
you'll
be
sure
you're
running
software
in
the
exact
same
environment
as
myself.
B
Right
so
gigs
for
those
not
familiar
with
it
easily
is
you
could
view
it
as
a
package
manager
or
you
could
view
it
as
the
provisioning
tool,
for
you
know,
container
images
or
as
a
distribution.
You
know
there
are
several
ways
to
approach
it,
but
basically
it
provides
a
bunch
of
command
lines
that
allow
you
to
create
software
environments
or
to
create
images
of
software
environments.
So
the
the
geeks
environment
command
that
we
see
here
creates
on
the
fly,
an
environment
that
contains
precisely
the
package
that
you
gave
on
on
the
command
line.
B
B
So
that's
pretty
much
the
kind
of
software
environment
control
that
we
want
to
have
for
jupiter
notebooks
as
well
right,
and
so
we
thought.
How
could
we
somehow
add
that
capability
to
jupiter
notebooks
and
that's
that's
the
whole
story.
The
whole
theme
which
led
us
to
geeks
Jupiter,
so
I
wrote
a
blog
post,
a
while
back,
which
maybe
some
of
you
saw
about
the
story
behind
geeks
Jupiter,
which
is
roughly
what
I
am
explaining
here
today.
B
B
B
So
can
you
see
something
here
yeah?
This
is
my
Emacs
shell,
all
right,
I
hope
it's
going
to
be
readable.
So
what
exactly
is
gig?
So
just
very
briefly
so
so
we
get
to
shared
understanding
of
what
geeks
is
about.
So,
like
I
said
you
can
view
it
as
a
package
manager,
so
you
can
run
gigs
install,
let's
say
closure
all
right,
and
then
it
behaves
like
a
regular
package
manager.
Oh
it's
telling
me
I,
don't
have
much
space
space
left
on
my
laptop,
but
now
I've
installed
closure
right.
B
B
And
I
have
my
ripple
great.
So
from
that
point
of
view,
it's
not
so
different
from
a
regular
package
manager,
except
that
if
we
look
at
what
I've
done
so
I've
run
two
geeks
in
sole
command
and
now
I
can
run
geeks
package
list
generations,
and
here
we
see
two
generations
listed
right.
So
the
first
one
has
only
closure
installed
and
the
second
one
installs
iced
tea
on
top
of
closure,
and
that's
why
we
see
that
plus
sign
at
the
beginning
of
the
line
here.
B
Ok,
so
that
means
I
can
roll
back
to
any
previous
generations
and
that's
kind
of
thing,
but,
more
importantly,
what's
very
different
from
mutual
package
manager
except
Nick.
So
I
don't
know
if
people
here
in
this
meeting
are
familiar
with
Nick's,
but
I
should
say
that
geeks
basically
implements
the
the
functional
deployment
model
of
Nick's
right.
So
some
of
the
things
I'm
describing
here
obviously
apply
to
Nick's
as
well
or
there's.
Not
so
much
I
mean
some
of
the
API
samples
are
difference,
for
example,
but
yeah.
This
is
the
benefits.
B
I'm
talking
about
here
are
really
about
the
functional
software
deployment
model
that
was
pioneered
by
Nick's,
and
so
one
thing,
that's
very
different
from
regular
package
managers
is
that
there
is
very
good
provenance
tracking
right.
So
if
I
run
the
geeks
describe
command,
for
example,
it
tells
me
which
geeks
I'm
currently
using
so
geeks
itself
is
developed
using
git.
B
So
here,
geeks
described
is
telling
me
that
I
have
one
channel
what
we
call
channels,
which
is
the
geeks.
The
official
geeks
channel
is
telling
me
precisely
which
commits
I'm
running
alright.
So
if
somebody
else
want
to
run
the
exact
same
geeks
to
install,
then
the
exact
same
cluster
and
the
exact
same
JVM,
the
tikkun
start
from
that
commit,
and
that
saw
the
information
the
need
basically
to
be
able
to
reproduce
the
exact
same
environment
bit
for
bit.
B
So
I
like
to
say
that
this
provides
the
same.
You
know
the
same
advantages
of
docker
images
containers
because
you
have
bit
for
bit
reproducibility,
but
at
the
same
time
you
still
get
the
advantages
of
traditional
package
managers
and
in
particular
you
have
very
detailed
provenance
tracking
information.
So
you
can
always
know
how
to
reproduce
a
given
software
artifacts
right,
that's
a
significant
difference,
all
right
and
then
yeah
again,
like
I,
should
before.
If
I
want
to
create
a
Python,
Python,
3
environment
I
can
run
its
environment
like
this,
which
creates
an
on-the-fly
environment.
B
B
B
So
let
me
know
if
I
should
do
in
a
bit
more
I,
don't
know
to
what
extent
that's
readable
or
pixelized,
so
in
Jupiter
notebook.
We
have
this
new
button
here
which
allows
you
to
select
a
kernel
and
essentially
when
you're
using
geeks
Jupiter,
you
have
a
new
kernel.
So
normally
you
know
you
have
a
Python
kernel.
You
have
the
closure
closure,
Peter
kernel,
for
example,
you
have
the
the
our
kernel
and
so
on
and
so
forth
and
Geeks
jupiter
is
actually
also
a
kernel
right.
B
So
as
many
of
you
I
guess,
no
jubilee
notebook
is
associated
with
one
language.
So
when
you
create
a
new
notebook,
it's
normally
associated
with
one
specific
kernel,
so
one
language,
but
when
you
select
the
geeks
kernel
instead,
you
get
some
sort
of
a
meta
kernel
which
will
allow
you
to
first
choose
what
environment
you
want
to
use,
what
software
environment,
then,
what
colonel
you
want
to
use
in
that
environment.
So
let
me
give
an
exam
an
example.
B
Let's
assume
I
want
to
create
a
Python
environment.
I
call
it
Python,
but
the
name
is
does
not
really
matter.
It's
only
used
internally
in
the
notebook.
Oh
actually
I
should
say
that
I
wanted
to
use
the
two
clothes
repeater
kernel
and
I
realized.
It
wasn't
packaged
yet
in
geek.
So
I
started
looking
at
it
yesterday
and
made
some
progress,
but
it's
not
there
yet.
So
maybe
maybe
we
need
to
discuss
afterwards
to
actually
have
it.
That
would
be
great
yeah.
B
All
right
so
anyway,
for
today
I'm
sorry,
I
start
with
the
Python
example
so
I'm
creating
that
environment,
which
I
call
Python,
but
then
I
need
to
specify
which
packages
I
want
to
use
in
that
environment.
So
we
will
need
the
the
Python
Carano
locusts.
What
is
it
called
again?
I,
always
don't
forget
its
I
PI
kernel.
B
Then
we
need
probably
let's
say:
matplotlib
right
and
so
from
there
I'm,
creating
that
environment,
so
I
entered
the
cell
and
then,
in
the
background,
the
geeks
kernel
is
creating
the
environment
right
and
then
instilling
me
right.
I've
chosen
the
I
PI
kernel
package,
which
is
quarantine
geeks,
so
the
the
five
one
three,
the
version
and
my
multiplicative
as
well
and
from
there
I
should
be
able
to
type
in
Python
code,
I
think
or
maybe
it's
to
creating
the
environment.
B
So
what
the
kernel
needs
to
do
in
the
background
is
to
actually
you
know,
actually
ensure
that
these
packages
are
available
so
that
they
are
built
and
available
locally
and
then
to
actually
start
the
debate
on
kernel
itself.
That's
coming
from
that
I
buy
kernel
package,
alright,
so
now
I
can
actually
run
Python
code.
So
these
two
plus
two
is
Python
code.
I
can
do
things
like
import
matplotlib
right,
even
with
compression
and
then
so
I'm,
not
very,
very
good
at
Python.
So
I
cannot
really
show
you
a
whole
lot
of
code
in
there.
B
I
know
about
this.
For
example,
this
is
my
UID,
while
the
UID
of
my
kernel
running
Python,
that
sort
of
stuff
all
right,
so
the
the
key
takeaway
here
that
we've
created
the
the
Python
environment
right
at
the
beginning
of
the
notebook
space
firing
rich
packages
we
wanted
to
have
in
that
environment,
and
then
we
get
precisely
those
packages,
and
then
we
run
called
with
the
kernel
that
we
asked
for
and
that's
very
different
from
the
normal
way
of
using
Jupiter
notebooks,
because
this
time
the
notebook
is
pretty
much
self-contained
or
almost
safe,
self-contained.
B
So
the
the
environment
is
it's
a
thing
in
a
way,
but
it's
it's
cached
so
in
in
gigs
and
actually
that's
inherited
again
from
the
NYX
package
manager.
So
every
time
you
build
something
like
you
build
a
packaged.
The
result
of
the
build
is
pretty
much
cached
in
a
special
directory,
which
we
call
the
store
so
for
geeks.
That's
under
/
news,
/
store
and
in
in
terms
of
in
functional
programming
terms,
it's
basically
memorization
right.
B
So
I,
don't
know
if
you're
familiar
with
that
movie,
it's
from
its
from
my
time,
maybe
not
from
yours.
Maybe
people
are
too
young
to
know
about
back
from
the
future
back
to
the
future.
Sorry,
but
I
like
to
say
that
geeks
you
to
traval
both
in
space
and
time,
so
it
allows
you
to
travel
in
space
in
the
sense
that
you
can
deploy
the
exact
same
software
environment,
on
different
machines
like
on
different
clusters
or
on
your
laptop
or
on
someone
else's
laptop.
B
B
So,
for
example,
I
have
my
notebook,
but
if,
if
I
really
want
to
be
complete
to
really
completely
describe
the
software
environment,
that
I
want
to
have
it's
not
sufficient
to
have
you
know
that
kicks
environmental
notation
that
I
showed
before
right,
because,
for
example,
today's
Python
package
in
gigs
is
Python,
three
point
something.
But
in
a
year
from
now
the
default
version
of
Python
will
be
I,
don't
know
Python
for
maybe
Oh
No
yeah.
B
Fight
on
many
versions,
our
hot
topic
in
Python
and
I
hear
anyway,
so
you
know
the
default
version.
That's
packaged
by
geeks.
Obviously
changes
over
time
right
so
that
that
geeks
environment,
a
notation
is,
is
not
sufficient
right.
So
if
I
really
want
to
fully
describe
my
environment,
I
also
need
to
say
which
geeks
revision
I'm
using
for
that
notebook
and
that's
where
the
spin
annotation
comes
in.
B
So
if
you
remember
just
before,
I
showed
you
that
geeks
describe
commands
so
geeks
describe
when
you're
using
geeks
on
the
command
line
allows
you
to
to
see
exactly
which
revision
of
geeks
you're
using
and
here
geeks
P
needs
all
of
the
of
the
do
all
of
Kings
described
because
geek
spin
allows
you
to
say
alright
I
want
to
use
a
specific
revision
of
geeks.
So
here
this
is
my
experimentation.
Let's
assume
I
found
out
that
this
particular
commit.
B
Id
is
working
for
me
and
I
want
to
make
sure
that
my
notebook
will,
you
always
be
run
with
geeks
from
that
commit.
Then
I
can
enter
that
geek
spin
annotation
and
in
the
background,
geeks
Jupiter
instantiate
geeks
from
that
comment.
Alright,
so
then
it
said
that
it
succeeded
and
if
I
follow
this
link,
it's
basically
pointing
to
the
web
view
of
the
committee
I'm
using
which
is
a
comet
from
January
last
year,
all
right.
B
E
B
It's
it's
really
both!
So
it's
it's!
It
uses
this
specific
revision
of
the
package
manager,
but
the
package
manager
is
what
is
what
allows
you
to
actually
install
the
software
packages
themselves
right
so,
for
example,
back
in
January
geeks
would
provide
I,
don't
know
guy
to
point
to
point
for
maybe,
and
so
if
I
asked
for
that
revision
of
geeks
and
then
I
asked
for
the
guy'll
package
I'm
going
to
get
guide
to
point
to
point
for
then
it's
all
done
see
graph
from
January
last
year
and
it.
B
E
B
Not
directly
so
usually
in
geeks
in
like
in
many
districts,
there
is
only
one
version
of
a
given
package
available
at
a
given
point
in
time,
so
that
there
are
some
exceptions.
So,
for
example,
for
see
we
have
several
major
versions
available
for
Python.
We
have
a
Python,
2
and
Python
3
currently,
but
usually
there's
only
one
version
of
a
given
package
so
for
guy
like
there's
a
need,
the
latest
stable
version
and
that's
why
you
actually
need
to
go
back
to
the
previous
revision
of
geeks.
B
If
you
want
to
use
older
software,
that's
yeah,
I,
guess
that's
different
and
also
a
very
different
way
of
approaching
things
compared
to
some
other
tools
that
try
to
provide.
You
know
to
to
leave
some
degree
of
Liberty
as
to
which
version
of
a
package
you're
using
yeah
they
did
you're
approaching.
Some
is
functional.
Package
management
is
that
you
declare
the
the
whole
package
graph
of
a
given
package.
So
you
probably
don't
want
to
maintain
ten
version
of
a
given
package
all
the
time,
because
that's
I
mean
there's
a
lot
of
QA
work.
C
B
C
Questions
yep
yeah
constant.
What
I
see
from
a
user
perspective.
C
Like
users
usually
specify
or
like
yeah,
when
you
work
from
with
geeks
from
the
get-go,
this
just
might
be
might
be
fine.
This
way,
but
yeah
normally
when
you're
trying
to
reproduce
already
existent
worked-
and
you
have
all
these
declarations
of
like
what
people
are
using
like
in
requirements,
dot,
txt
files
or
in
depth
even
files
in
enclosure,
and
would
it
be
possible,
like
yeah,
I
I,
get
that
this
is
like
it.
It
depends
a
lot
on
the
library
like
a
Python
library
that
depends
system.
C
Libraries
is
obviously
much
harder
to
to
get
different
versions
going
whereas
like
for
for
a
closure
dependency,
that's
just
a
jar.
This
might
actually
be
pretty
simple
right
to
to
build
something,
to
bring
in
a
different
version
of
versions
of
Maidan
packages
and
and
support
all
declarations
that
there
are.
C
B
B
B
B
Yes
exactly
so,
it's
only
knows
about
packages
available
as
well
as
geeks
packages.
So
if
you
have
software
available
as
a
via,
for
example,
peep
for
Python
or
that
kind
of
stuff,
then
you
first
have
to
convert
it
so
to
speak
to
a
geeks
package
and
the
geeks
import
tool
that
you
mentioned
allows
you
to
do
that
quite
easily.
B
F
B
It's
obviously
nice
and
not
really
doable
this
way,
but
we're
really
trying
to
you
know
it's
provided
it's
all
set,
that's
consistent,
and
that
gives
enough
of
an
incentive
to
to
be
used
instead
of
language.
Specific
package
managers,
because
you're
never
gonna
use
a
single
language
in
your
whole
stack
right.
So
you
need
you
need
tools
that
can
that
can
handle
software
in
different
languages.
B
B
B
B
B
So
basically,
what
that
means
is
that
Jupiter
itself
Jupiter
notebook
talks
to
Giggs
Jupiter
using
the
the
kernel
product
call,
which
is
JSON
JSON
over
z1q
roughly,
we
have
Jupiter
kernel
implementer
in
this
meeting,
so
someone
was
probably
very
familiar
with
it
and
then
geeks
Jupiter
essentially
behaves
as
a
proxy
to
the
actual
kernel
that
you
want
to
talk
to.
So
every
time
notebook
send
the
message
to
the
geeks
Jupiter
kernel,
then
the
geeks
Jupiter
kernel
then
relays
that
message
to
the
right,
colonel.
B
B
So
because
this
is
about
reproducibility,
we
want
to
make
sure
that
you
know
everything.
You
know
that
your
notebook
is
not
going
to
interact
with
random
things
on
your
file
system,
for
example,
or
with
the
network
things
like
that,
and
so
that
meant
running
the
kernel
in
the
container.
So
in
linux
terms
it
means
using
separate
namespaces
if
you're
familiar
with
that,
like
it's
pretty
much
like
change
routes,
chroot
thing
so,
for
example,
if
I,
if
I
go
back
to
my
Titan
example
or
maybe
maybe
that
one
has
more.
B
B
So
now,
I
have
my
Python
environment.
I
should
be
able
to
run
Python
cells,
one
by
the
way,
this
cell,
that
defines
the
hello
function
here.
Had
it
has
again
the
the
geeks
environment,
notation,
meaning
that
I'm
explicitly
asking
geeks
to
take
the
my
ipython
environment
that
I
created
above
so
it's
in
this
case
it's
redundant,
but
it's
a
facility
that
allows
you
to
be
explicit
for
each
cell
about
the
environment
that
you
want
to
use.
In
case
you
have
several
environments
in
the
same
notebook.
B
B
I,
don't
know
what
it's
doing.
Maybe
it's
downloading
something
whatever.
Maybe
I
can
go
back
to
that
to
that
one
okay,
so
this
is
also
a
Python
environment,
so
the
one
we
saw
before
and
like
I
showed
before.
If
I
look
at
the
UID
of
my
jupiter
notebook
process,
it's
1,000.
Okay
and
the
good
thing
is
that
because
the
kernel
despite
on
kernel,
is
running
in
a
container
in
separate
PID
namespaces,
separate
user
namespaces,
then
you
you're
always
going
to
get
UID
1000
all
right,
regardless
of
your
whole
system.
B
B
So
what
that
means
is
that
you
know
remaining
in
a
container
separate
namespace
is
a
different
file
system
view
and
that
ensures
that
my
notebook
cannot
use
things
that
happen
to
be
on
my
laptop
right,
so
it
it
ends
it
ensured
the
notebook
is
going
to
be
self-contained
and
is
not
going
to
refer
to
local
files
or
even
to
the
the
internet.
So
it
cannot
actually
connect
to
a
remote
machine
here,
because
it's
running
in
a
separate
networking
namespace,
and
so
it
basically
likes
network
access
entirely.
B
B
Hours
I
was
waiting
for
that
question.
Actually,
so,
alright,
so
not
having
access
to
the
network
is
obviously
a
problem.
Usually
you'll
want
to
download
data
from
somewhere
so
that
you
can
process
it.
For
example,
things
like
that.
So
how
do
we
do
that?
Well,
we
need
additional
facilities
right.
We
need
to
be
able
to
download
stuff
so
for
that
we
introduced
a
an
additional
annotation,
which
is
these
geeks
download,
a
notation
that
you
can
see
here
in
this
cell.
B
So
it's
pretty
much
like
a
normal
downloads
right,
except
that
you
have
to
specify
the
expected
hash
at
the
end
right,
so
the
sha-256
hash,
and
so
that
ensures
that
when
you
run
the
notebook
you're
going
to
download
this
file
from
this
URL,
but
it
has
to
have
this
hash
and
if,
if
you
get
a
different
hash,
then
it's
an
error.
You
cannot
go
any
further
right,
so
I
can
evaluate
these
cell.
B
C
C
B
B
Right
so
anyway,
this
is.
This
is
a
basic,
where
the
basic
approach
that
we
have
for
four
gigs
Jupiter.
So
the
thing
here
is
first
to
have
people
be
able
to
describe
precisely
the
software
environment
that
they
need
and
then
also
make
sure
that
they
describe
precisely
the
external
resources
that
the
notebook
needs.
B
Okay,
so
this
is
actually,
if
you've
ever
read
about
Knicks
or
geeks,
before
what
we're
doing
it
is
essentially
an
extension
of
the
work
that
had
been
done
initially
for
for
Knicks
and
also
implemented
by
by
geeks.
So
this
is
a
very
good
paper.
I
really
recommend
it
by
L
code
Ostra
and
his
former
colleagues
about
the
inception
of
Knicks,
essentially
and
the
functional
software
deployment
model
and
essentially
we're
here
implementing
the
same
model
roughly,
but
in
the
context
of
an
interactive
environment
which
is
Jupiter
notebooks
right,
but
the
ideas
are
pretty
much
the
same.
B
Only
translated
to
the
context
of
the
interactive
notebook,
yeah
I
think
that's
that's
pretty
pretty
cool
so
from
the
viewpoint
of
a
functional
programmer.
You
know
this
is
thing,
that's
quite
easy
to
understand.
We
want
to
view
notebooks
as
pure
functions,
so
they
take
input
and
they
produce
output,
but
there
are
no
side
effects,
no
undeclared
inputs.
So
with
these
kicks
to
be
either
kernel
with
the
additional
annotations.
The
idea
is
that
the
notebook
can
really
be
viewed
as
a
pure
function,
because
everything
all
the
inputs
are
declared
in
the
notebook
itself.
B
That's
the
idea,
so
I'm
gonna
wrap
up
for
the
the
talk
and
then
we
can.
We
can
go
in
discussion
mode,
I
guess
so.
There
are
obviously
still
some
open
issues.
So
this
is
pretty
much
a
proof
of
concept.
I
mean
it's
working,
it's
usable,
but
there
are
things
that
are.
That
could
be
improved
like
the
the
user
interface.
So,
for
example,
we
he
saw
the
geek
spin
interface
before
it's
great.
B
It
does
the
job,
but
as
a
user
you'd
like
to
be
able
to
say
rights,
for
example,
I
want
to
use
the
the
first
commit
where
the
Python
version
was
number
of
three
points,
X,
something
like
that.
So
we
I'm
sure
we
could
improve
the
way
you
specify,
for
example,
the
geeks
revision
that
you
want
to
use,
because
you
know
you
think
that
sha-1
that
git
commit
ID
is
is
convenient
if
you're
already
using
geeks,
maybe
but
if
you're
not
into
geeks.
That's
not
the
best
user
interface.
B
Another
question,
so
we
implemented
it
as
a
Jupiter
kernel.
The
question
is:
should
deployment
be
built
into
Jupiter
itself,
rather
than
be
a
separate
thing
that
kernels
or
tools
like
binder
implements?
That's
I,
guess
that's
an
open
question
their
arguments
in
favor
of
keeping
it
separate
from
Jupiter
in
itself.
It
provides
more
flexibility,
you're
not
tied
to
a
specific
deployment
tool,
which
is
good,
but
on
the
other
hand,
software
deployment
should
really
be
a
central
concern
for
Jupiter
notebooks.
B
If
we
are
to
use
them
for
reproducible
science,
so
yeah,
it's
you
know
their
pros
and
cons.
I
guess
another
question
that
people
ask
is
about
interoperability,
so
this
is.
This
is
great.
These
annotations
allow
you
to
have
a
reproducible,
notebook
and
that's
pretty
cool,
but
it
assumes
that
people
are
running
Jupiter
notebook
on
on
the
machine
that
already
runs
gigs,
which
you
know
as
a
geeks
developer.
I.
Think
it's
a
great
thing
to
do,
but
still
that's
that's.
B
That
could
be
problematic
from
an
interoperability
viewpoint.
So
previously
someone
suggested
that
we
could
add
a
geeks
notation
to
automatically
generate
a
docker
image
from
your
notebook.
So,
like
you
would
have
a
semicolon,
geeks
pack
in
your
notebook
that
could
generate
a
darker
image
of
your
notebook,
something
like
that
and
I
think
that
that
could
be
an
improvement
in
that
regard
and
it's
actually
your
low-hanging
fruit,
because
Geeks
has
a
geek
spec
command
that
can
generate
darker
images
or
singularity
images
or
plane
doubles
so
again,
future
work,
I,
guess
and
so
in
a
nutshell.
B
A
geeks
Jupiter
is
about
making
self-contained
notebooks
that
can
actually
be
reproducible
with
automatic
and
reproducible
software
deployments
and
also
called
running
in
isolated
environment
again,
to
make
sure
that
it's
as
reproducible
as
it
could
all
right.
This
is
it
for
the
the
talk
part
of
this
meeting
for
myself,
but
I'm
happy
to
answer
questions
now.
C
All
right
thanks
a
lot
so
yeah.
So
if
I
may,
like
my
outline
like
the
dream,
I
would
have
about
dependencies,
and
maybe
you
can
speak
a
bit
to
like
if,
if
that's
ever
attainable
and
like
how
it
would
fit
within
the
goal
of
gigs
so
like
as
I
said,
I
think
it's
it's
quite
critical
like
in
order
for
people
to
like.
Currently
this
requires
quite
a
bit
of
buy-in
from
people
and
they
need
to
change
like
yeah
all
of
the
commands
and
tools.
C
They
know
don't
work
anymore
right
and
also
all
the
description
files
so
like
in
my
ideal
world,
like
people
could
continue
to
use
the
descriptions
that
that
they've
used
in
the
past,
like
requirements,
dot
txt
like
Depp's,
Eden
and
and
yeah
other
descriptions,
I.
Think
people
care
like
more
about
like
exact
versions
of
libraries
that
they're
using
them
like
things
further
down
the
stack
like
GCC
and
stuff
I.
Think
for
for
just
like
the
distribution
like
yeah.
What
you're
currently
doing
is
is
fine
but
yeah
when
we
go
further
down
and
also
like
spot.
B
I
guess
you
also
mentioned
proprietary
software,
so
new
accessor
project
is
obviously
not
about
proprietary
software,
so
it
does
not
provide
any
non
free
software
package,
but
you
can
have
your
own
channels
providing
non-free
software
packages.
That's
something
you
can
do
some
people
do
it.
I
would
actually
argue
that
from
a
reproducible
science
viewpoint
using
black
boxes
is
not
a
great
idea.
B
I
mean
you
want
to
be
able
to
know
what
software
you're
running,
what
it
is
that
you're
doing
and
to
me
that's
a
problem
to
rely
on
black
boxes,
for
that,
but
I
do
understand
that
some
people
do
it
and
yeah,
because
in
their
field
it's
very
common
to
use
I
mean
if
you
want
to
use
GPUs
like
you
were
saying
you,
you
have
to
use
that
Nvidia
thing,
for
example.
Unfortunately,
I
hope
it's
going
to
change,
but
yeah.
C
C
B
So
it's
actually
ironic
because
the
project
does
not
provide
any
official
darker
image
for
geeks,
for
example,
but
we
do
have
tools
that
make
it
very
easy
to
generate
docker
images,
so
I'm
sure
we
could.
We
could
do
better
and
provide
an
official
docker
image
yeah,
that's
something
we
need
to
work
on
and
it
would.
B
To
get
started,
I
guess,
and
so
so
indeed
you
could
use
it
on
Mac
OS
and
on
Windows,
probably
I'm,
not
very
familiar
with
Windows
I
guess.
Windows
nowadays
implements
the
Linux
Cisco
ABI
with
the
windows
subsystem
for
Linux.
So
it
may
be
that
you
can
just
take
the
the
geeks
binary
tar
ball
from
the
download
page
of
the
geeks
website
and
unpack
it
and
run
it
directly
on
Windows
I,
don't
know,
I
haven't
tried,
but
from
what
I
understood
of
the
windows
subsystem
for
Linux,
it's
supposed
to
work
out
of
the
box
and.
C
Lastly,
like
what
we
tried,
what
I
think
yeah
an
external
we
we
try
to
mount
the
like,
keep
a
global
store
around
and
like
mount
that
into
like
via
NFS
or
some
shared
file
system
like
mounted
into
into
every
notebook
and
then
like
it's.
Currently,
it's
quite
a
bit
big
problem
like
with
docker
images
like
when
you
want
to
run
them
and
the
cloud
that
you
have
to
download
them.
First
and
these
environments
don't
really
compose
right.
C
So,
whatever
the
install
the
order
you
install
in
like
totally
changes
your
your
layers
and
then
you
have
to
download
gigabytes
of
stuff
with
just
some
minor
changes.
Right
and-
and
this
is
something
that's
yeah-
would
work
much
nicer
in
with
gigs
like
mounting
the
thing
you
don't
need
to
download
anything
and
things
just
all
of
it
like
easily
of
the
network
and
everything
that's
once
been
installed
does
never
has
to
be
built.
C
Somebody
else
again,
I
think
that's
yeah
that
can
provide
down
the
road,
quite
a
amazing
user
experience,
and
but
maybe
yeah
like
like
also
the
the
build
server
that
you
provide
like.
Would
it
be
possible
or
how
how
many
resources
are
there
and
like
how
long
do
you
keep
stuff
around
there,
or
is
that
something
that
yeah
we're
we're?
You
would
also
yeah
we're
more
support.
Could
help
like
to
to
speed
up
the
build
times
for
for
old
stuff
and
yeah
keep
a
bigger
shared
cache
around.
B
Maybe
40
build
machines
now
which
is
depending
on
how
you
look
at
it
quite
a
lot,
and
not
necessarily
so
many
but
I
mean
that's.
That's
already,
I
think
a
good
number
of
big
machines
for
for
what
we
have
to
build,
and
we
also
have
tens
of
terabytes
of
storage
available
starting
from
maybe
last
year,
I
think
so.
That's
still
quite
recent.
That's
a
new
year
year
and
a
few
months,
I
guess.
But
that's
we
have
quite
a
lot
of
storage
already
to
store
things
from
the
past.
B
That's
not
enough
to
store
things
from
you
know
forever.
Obviously,
but
then
yeah
I
mean,
as
suppose,
I
know.
The
next
project,
for
example,
is
using
Amazon
s3
to
store
things
for
a
long
time.
That's
one
option,
but
in
the
end
also
we're
working
on
reproducibility
reproducible
builds,
and
so
our
goal
is
to
make
sure
everything
remains
reproducible,
even
if
you
actually
have
to
build
it
yourself
right
we're
also
working
with
search.
B
C
B
C
D
B
B
So
essentially,
a
package
definition
in
gigs
is
purely
declarative
and
it's
pretty
much
like
you
know
what
you
would
write
with
other
packaging
tools.
So
you
declare
the
name
version:
the
URL
for
the
source,
the
the
commit
you're
targeting,
for
example,
and
then
so
this
one
is
not
the
simplest
package.
I
should
probably
start
with
the
the
simple
package
just
to
get
a
feel
of
what
it
looks
like.
So
this
is
Agnew
hello
package
and
yeah.
You
get
all
the
the
usual
pieces
of
information.
B
C
B
Then
there
are
other
bit
systems
like
there's
a
see.
Make
build
system
for
software
using
see
make
there
is
a
closure
build
system
for
closure
things,
I,
guess
I'm,
not
sure
exactly
what
it
uses
under
the
hood,
and
this
is
all
so.
This
is
all
in
scheme.
So
at
the
same
time,
you
have
declarative
package
definitions,
but
it's
all
schemes,
so
you
can
use
you
know
in
Emacs
you
can
use
gazer,
which
is
a
mode
for
guile
and
racket
and
chicken,
and
you
can
use
it
to
navigate
your
code,
for
example.
C
B
If
I,
this
is
an
example
of
a
package
with
dependencies,
so
this
one
is
already
a
bit
more
complex,
so
we
have
here,
we
have
patches
okay
and
then
here
we
have
dependencies,
so
we
have
native
inputs
and
inputs.
So
native
inputs
is
about
dependencies
needed
that
build
time
and
inputs.
These
dependencies
needed
at
runtime,
essentially.
B
Then
a
package
can
provide
arguments
tweet-tweet
build
system.
So,
for
example,
if
you
want
to
modify
the
the
sequence
of
build
phases,
you
can
say
alright
I'm
using
the
standard
build
phases,
but
after
the
install
phase,
I
want
to
have
a
custom,
install
phase
and
that's
the
lender,
where
you
can
do
arbitrary
things.
So
in
this
example,
we're
just
patching
the
the
file
name
that
appears
in
the
Egret
and
F
grep
scripts.
That's
for
the
grab
package.
B
Previously
someone
mentioned
Geeks
import
all
right,
so
Geeks
import
looks
like
this.
For
example,
if
I
want
to
import
the
package,
the
type
I
package,
that's
called
its
gen
dangerous,
it
actually
exists.
I
can
run
gigs
import
by
PI,
it's
dangerous
and
then
I
hope
you
can
read
it.
It
downloaded
metadata
from
Wi-Fi
and
then
it
automatically
generated
that
thing.
That's
package
definition,
usually
for
pi
PI,
for
example,
it
works
out
of
the
box,
like
you
can
copy/paste
that
package
definition
and
it
just
works.
B
Then
you
know,
depending
on
the
upstream
repo,
you
may
have
to
make
additional
modifications
to
make
it
work,
or
it
really
depends,
but
for
pi
PI
is
quite
reliable,
for
example,
and
there
there
are
quite
a
few
importers
that
are
supported.
What's
it
called
yeah,
so
there
are
so
called
importers
for
new
packages,
fornix
type
IC
package
package,
helper
Crown,
crates
and
so
on
and
so
forth.
B
C
B
C
B
Only
a
handful
of
closure
packages
I
checked
yesterday
and
we
don't
have
an
importer
also
for
closure
packages.
So
that's
definitely
something
we
need,
because
doing
them
by
hand
is
not
fun.
So
it's
it's
great
I'm,
not
very
familiar
with
line
in
Ghana
I
think
it's
called
the
closure
package
Hollinger,
but.
E
Of
convergence
with
the
package-
it's
like
is
some
tooling
that
came
out
which
is
called
from
from
cognitive,
the
people
from
closure.
It's
called
tools,
deaths
and
it
changes
the
landscape
of
package
manager
package
managing
in
enclosure,
but
we
still
amidst
the
whole
kind
of
evolution.
It
was
a
clearing
at
that.
A
God
mask
ass,
oh
yeah,
you
can
see
they
will
hear
all
the
time
then
yeah.
So
I,
guess
by
the
official
time
of
the
meeting
to
end,
is
in
ten
minutes
and
for
now
we
can
chat
and
it
might
not
be
on
the
YouTube
edited
version
that
we'll
upload
later.
But
if
there
is
anything
else
so
that
people
here
will
do
this
pass
until
we
possibly
find
to
the
week,
then.
E
That
I
yeah
yeah,
hey.
C
B
B
B
How
I
see
it
so
I
think
what
you're
saying
essentially
that
we
have
a
packaging
problem
right
I
mean
I
mean
at
least
that's
that's
the
way.
I
look
at
it,
so
I
think
it
would
be
great
to
have
a
bridge
from
Java
and
closure
or
packages
to
geeks.
That's
how
we
usually
address
that,
because
the
the
benefits
done
it
that
you
can.
B
You
can
actually
take
care
of
all
your
packages
with
with
geeks
with
a
single
tool
which
is
quite
convenient
and
you
get
the
the
properties
that
you
have
with
geeks,
which
include
you
know,
provenance
tracking
reproducibility.
So
that's
pretty
nice.
So,
in
my
opinion,
it's
nicer
than
mixing.
You
know
Condor
with
docker.
We
speak
that
sort
of
thing,
but
obviously.
B
Right
so
I
mean
so
for
most
languages
that
have
language
specific
package
managers.
We've
we've
written
an
importer
like
I,
showed
before
and
I
think
that's
what
we
would
need
to
do
for
closure
as
well,
which
is
complicated
by
the
fact
that,
like
Daniel,
was
explaining
that
there
are
several
tools,
so
lining
gun,
plus
tool
steps.
That's
the
name
of
the
other
one
right.
Yes,
yes,
which
is
a.
E
Power,
it
yes,
but
I,
don't
see.
I
just
realized
that
I,
don't
think
you
need
to
support
any
of
the
closure
tools
needs
everything
you
need
to
support
the
memory,
because
this
is
how
we
work
with
packages
in
closure.
Every
package
I
mean
every
dependency
is
the
job.
So
what
you
need
to
sell
far
is
what
jars
you
need
and
if
you
need
to
do
anything
for
closure
specifically
what
what
you
need
is
is
support
for
the
JVM.
E
F
E
B
So
obviously
for
Java
you
can
use
Charles
directly,
you
don't
have
to
go
through
Nick's
or
even
Condor,
or
whatever
I
mean
you
can.
Yeah,
like
you
say,
can
directly
use
jars
and
that's
one
of
the
big
advantages
of
Java
for
for
the
geeks
project
itself,
really
try
hard
to
build
everything
from
source,
which
means
not
reusing
pre-built
binaries
such
as
jars
and
that's
I,
think
that's
important
from
many
different
viewpoints.
B
B
E
B
E
You
know
three
components
is
a
group
ID'd
as
a
name
and
there's
a
version
together.
They
form
a
identifier,
you
cannot
mix
up
and
you
cannot
modify
after
the
fact
jar
right
once
once
they
are
published.
That's
it.
That's
that's
so
you
know,
you
know
what
you're
getting
I
mean
in
terms
of
in
terms
of
version
artifact.
A
A
B
Yeah
I
think
so
so,
for
example,
for
the
closure
packages
that
we
have
in
geeks,
we
actually
build
them
from
source
I,
don't
remember
the
specifics,
because
I'm,
not
the
the
author
of
that
part,
but
I-
think
it's
important
in
general
to
be
able
to
you
know
to
rebuild
by
yourself
and
verify
that
you
get
the
same
binary
as
the
official
binary,
for
example.
We're
very
much
involved
with
the
reproducible
builds
effort,
which
is
that
available
attributes.
B
A
A
Now
is
like
the
official
time
of
end
of
the
meeting
and
I
guess
it
depends
on
you
if
you
wish
to
stay
a
little
bit,
if
you
can,
then
that
would
be
lovely
and
otherwise
we
can
take
it
as
the
moment
to
end
the
official
video
and
then
anybody
who
wishes
to
stay
and
keep
chatting.
So
what
do
you
think?
Would
you
like
to
continue
a
little
bit
more
or
maybe
you
need
to
go
to
another
thing,
I.
B
E
Minutes
but
I
was
wondering
how
the
project
is
evolving
because
I'm
following
the
projects
from
a
distance
and
I
accessed
as
they
you
know,
as
as
someone
who
appreciates
both
guile
and
and
and
what
gives
to
us,
I
I,
wonder
how,
for
example,
since
last
time,
I
heard
you
in
Nava
and
Japan,
it
was
too
useful
or
no
actually
more
I
think
maybe
very
for
you.
I,
don't
know
three
years.
When
was
this
as
I.
Remember
anyway,.
E
Okay,
so
so
how
what
what
is
changing?
How
how
is
the
projects
evolving
do
you?
Do
you
manage
to
get
people
on
board?
Do
you
manage
to
get
the
resources
you
need
to
you?
You
have
a
clear
direction.
The
are
you
happy
with
how
the
project
is
being
adopted.
The
adoption
rate
being
honest,
I
mean
I.
Would
I
would
love
to
hear
you
about
talking
about
that.
B
B
B
So
if
we
go
deep
down
to
the
wound
up
the
dependency
graph
being
able
to
build
that
from
source
to
some
extent
or
another
word
put,
it
is
being
able
to
use
as
few
binaries
as
possible
as
sources.
You
know,
I
think
that's,
that's
again,
very
important
work
from
security
and
transparency
and
user
freedom
viewpoints
and
I'm
really
happy
people
started
working
on
it
yeah.
So
that's
that's
one
example.
Then
we've
had
lots
of
improvements
in
many
areas
for
the
stand
alone,
distribution
that
we
called
geeks
system
yeah.
B
C
B
C
E
B
So
I
guess
there's
they're.
Mostly
there
are
many
individuals
like
good
new
Linux,
savvy
people,
I
would
say,
or
people
interested
in
user
freedom
things
like
that,
and
then
there
are.
There
are
more
people
interested
in
reproducibility,
so
people
who
were
familiar
with
other
package
managers,
for
example,
and
probably
got
tired
of
up
their
shortcomings
in
terms
of
reproducibility,
and
so
we
we
get
actually
lots
of
people
who
are
not
familiar
with
functional
programming,
but
just
wanted
people
to
use.
You
know
to
have
those
with
the
facilities
like
transactional
upgrades
and
wallbox.
B
Because
we,
even
all
the
people
who
write
new
package
definitions,
most
of
them
are
not
schemers
or
even
mispers,
which
I
think
is
interesting.
You
know
sorry,
you
know
initially,
they
start
like
bye-bye
writing
simple
package
definitions,
because
you
know
it's
purely
declarative,
so
you
don't
have
to
be
an
expert
in
scheme
to
understand
what's
going
on
and
then
they
start
writing
actual
scheme
code
without
really
you
know
noticing
I
would
say,
and
that.
F
B
B
Definitely
not
a
fight.
We
have
so
that
the
two
projects
are
I
mean
are
similar
in
the
sense
that
they
both
implement
the
functional
software
deployment
model
and
that
sets
them
apart
from
pretty
much
everything
else
right.
But
then
we
have
different
approaches
to
many
things
like
the
the
UI
is
very
different
and,
as
you
know,
the
the
internals
are
very
different
because
we
chose
to
to
provide
a
unified
scheme
interface
to
basically
everything
rural
snicks.
Has
you
know
this
specific
domain-specific
language?
That's
called
the
next
language
plus.
C
B
E
B
C
B
For
example,
in
terms
of
the
of
the
CLI,
the
command-line
interface
I
think
it's
easier
to
use
geeks
and
Knicks
nowadays,
although
the
Knicks
CLI
has
also
vastly
improved
I
guess
about
the
last
few
years,
but
I
really
want
it
to
be
simple
to
use
so
we're
trying
how
to
wear
them
on
the
user
interface
and
that
I
think
that
makes
a
difference
if
you've
tried
both
you
I
hope
you
do
see
a
difference.
So
that's
one.
B
Also,
if
you're
for
tinkerers
and
I
would
hope
that
you
know
most
people
would
at
times
be
tinker.
As
you
know,
you
don't
have
to
be
a
tinker
all
of
your
time,
but
in
gigs
we
really
make
it
easy
to
to
see
what's
going
on
in
your
system,
because
everything
is
in
one
language.
It's
it's
very
easy
to
jump
from
one
place
of
your
system
to
a
different
place.
B
It's
sort
of
I
mean
twist
lispers,
I,
wouldn't
say
it's
a
list
machine
when
you
run
geek
system,
because
obviously
we're
still
running
the
typical
new
user
land,
which
is
lots
of
C
code.
But
still
there
is.
There
is
quite
a
bit
of
skin
code
in
there,
like
the
init
system,
isn't
scheme
everything
to
build
the
system
itself
isn't
scheme,
so
that
makes
it
really
hack
a
ball
and,
to
me
very
pleasant,
I
think
to
to
Lee
spirits.
It
should
be
very
pleasant.
A
B
A
Thanks
a
lot
very
interesting,
yeah
I'm,
not
sure
little
dick.
If
you
know
how
refreshing
it
was
for
us
to
like
have
that
glimpse
of
another
another
ecosystem
and
those
inspiring
ways,
you
use
functional
programming,
and
now
you
know
it
is
for
us
the
time
to
learn,
to
go
and
learn,
and
at
least
myself
I
must
I
must
now
try
to
do
some
guile
and
geeks,
and
thank
you
so
much
for
this.
It
was.