Video summary
The speaker, a Debian developer working on ImageMagick and JavaScript packages, addresses the complex challenges of maintaining JavaScript within the Debian ecosystem. He begins by highlighting historical issues with package management, specifically the problem of handling multiple upstream versions for a single package, which led to conflicts in dependency resolution. To solve this, he introduced a versioning scheme using concatenation rather than simple addition, ensuring that version strings strictly increase as components are updated. However, this approach faced hurdles regarding Debian policy compliance and compatibility with specific security standards like Dfsg, necessitating further documentation and community consensus to formalize these practices.
Moving into the present day, the talk explains how JavaScript has evolved from interpreted code to being compiled from TypeScript, utilizing tools like Rollup and Webpack that function similarly to GCC by generating dependency graphs for modular application development. The speaker notes a shift toward cross-compiling against virtual CPUs rather than static linking to avoid security risks, though this creates new maintenance burdens for binary packages. A significant portion of the discussion focuses on the friction between shared memory architectures and JavaScript environments, particularly regarding lost source code for some Virtual Machines and the inherent time-channel attack vulnerabilities in cryptographic procedures implemented in browsers, which complicates security proofs.
The presentation concludes with a look at future strategies to streamline the integration of JavaScript into Debian, including the development of filters to convert incompatible module systems like MGS to CGS, thereby reducing the need for multiple source versions. The speaker emphasizes that while the current team is small and faces bootstrapping loops in reverse dependencies, their long-term goal involves compiling major projects like Firefox and Chromium directly from Debian sources. Ultimately, the talk underscores that despite these technical hurdles and philosophical debates over code aesthetics, JavaScript remains essential for modern tasks such as tax declaration and daily computing needs, inviting collaboration to solve real infrastructure problems within the community.
Read the full video transcript
oh no it's now okay let's go thank you
very much for being here I think the
last talk for of the morning uh Bastian
rarez is going to talk to us about the
state of JavaScript in Dean I'm really
very grateful that someone else than me
is taking care of that thank
you so I am Roa I am Debian developer I
work mainly on image magic but is High
popcorn packages and today also I will
present my work on
JavaScript so uh a contents warning
please if you are if you studed
theorical computer science uh pass your
way if you think that well are better Ru
than Square ra pass your way also and if
you think that reason gr the world it's
not for
you so for first historical problem is
that it is a packages with a popcorn
weekly popcorn of half a million and
this packages is dedicated to test if a
number is
odd so uh there are also the version for
is even if you need
it not is odd does not work uh notice
that we have seven ver
and free meur ver for of these
packages one dependency of this packages
is his number
but and uh FTP Master remarked that the
metadata is more than the
Cod and um first approach was to patch
every package because we have half about
1,000 reverse depends of these packages
so we patch it uh every packages but
it's done not Square well so the
solution was thanks to Raphael to use
something that was not considered for
this is was multiple Upstream packages
us it mainly for liber liber need a
packages for COD a packages for Doc and
another packages for some for
translation so we we we need to pack
them in one packages so RAF do the hard
work the problem was it was ConEd only
for a package with a single version or
us we need to put small small packages
with different version so the idea is
was to use concatenation of versioning
this is is a wellknown
JavaScript sham and we could not use
plus because we uh we take we conflict
with the Security Plus so we use plus
till because we are after but
before it work until I eat the path Mass
limits due to rock rock jolet cd5 system
that is uh
127 sh sh not you
B and but I ignore it because I think we
need CD after this
day the problem is that I eat a not well
exercised cod paff in deck so I crush it
duck due to versioning I I think I must
be thinking by FTP master I exercise
some well known not wellknown code paath
um the problem is that even if D was
fixed I am it uh the name Max limit
because ER is not a release architecture
so if my package name with version
exceed uh two
255
sh I could not name the
package so I need something that was
strictly increasing function of
version the idea of fad was oh
fortunately every package ver JavaScript
package is major minor patch so or we
could use add as an increasing
version so let's do your homwork
I have a component a main component 206
I have a component one 2 4 a component 2
2.1 a component 3 10 Z the result is
20.6 plus till shum
13.2 do5 and it's strictly increasing if
I increase one of the
version we get youan stort
[Laughter]
work of myself and
Y it perfectly work it was use that for
before it was not free but you see
the idea it was documented in You Man
pages I think we must if we have any
volunteer in the room for put this in
Dean policy please
ask I need
volunteer our problem shum is not
compatible with dfsg and of individual
versioning where should I put the dffg
in the
cheum I could not add G is not a
number okay shum is not compatible with
jit versioning fortunately sh sha is not
an increasing version is not increasing
with verion it's a cryptographic ash so
if verion is one more sha will not be
one
more so how can I pass jit versioning to
this
Sham this need to be documenting in the
policy the problem also is that
versioning in Debian is not fully
specified so what name means every I
suppose everybody in the room know what
mean this vering
dfsg plus Deb um 11 U1 till the Deb 10
U1 what is it any idea it is a back Port
of security fix from bookr to
Bull and it is the only safe version SC
do you know that backport work only by
luck against security support because a
b is before d
it work in in some case not
all uh do you know uh uh do you see
documentation for the plus ready
suffix
no so I have open a bug against Dev
please comment and get
consensus uh another problem what is a
new version for youan and tracker from
for now we consider that a new version
and remember on usan is when the main
version increase not the component
increase we need technically it could be
solved but we need policy and
process and
documentation so now we get the sources
of every small package is EV is odd I
suppose you follow it okay so develper
is not ready for 10 20 components to be
compilated separately so first we try to
use a loop in bash in the make file is
it not
scalable so y had invented pgs tools
that is a th wrapper WR in P in order to
compete it from the
documentation what they
do so we wrap on dash uh Auto configurer
and we populate everything right we
build by launching shell extract from do
Debian GS component name
build and we run in the right
order we run
also auto test not that we populate
build variable that is not version every
sub component get virtual providers so
you can Depends for instance if you want
to depend on node even that is packages
no odd you say you use nod TR even eal
some verion it work because we use
Virtual provide problem brakes doesn't
work because braks doesn't work against
virtual
provides example if you want to see that
is the tree of one of the packages with
a small snippet in every directory in no
icon so it is workable we have some
process and it could
work okay now we went this was the past
we go to the
present uh JavaScript is now compiled it
we have no JavaScript packages there are
always comped from
typescript that gu type um
check we use often rollup and web pack
the definition of web pack it take the
dependency generates a dependency graph
allowe web developer to use a modular
approach from we application development
purpose for me it's ring a bell it's oh
GCC it's the same definition by GCC GCC
what is a GCC it's a program I take a
graph and generate machine
code so we have a new arh triplate Brer
White Park
es
2023 also we have some sub AR we compile
from s 2023 but we could compile from an
older CPU virtual CPU that is
es6 some but we are also some
incompatible well pack Packer computer
Brer
R so and mute thanks for your work on
Cross competing we are cross competing
statically against a virtual
CPU all so on the deban side I reassure
you we try to avoid static linking and
we do import we patch the packages if
you can by importing dynamically the
library so you we try to avoid add
static
packing uh so news of years everything
is
Javascript I need some C library compil
to
JavaScript for instance I need a regs
extended raps library to be comped in
JavaScript so we can oh why do we
reinvent to well take libz and compete
it to
JavaScript and get it on the browser all
uh do security team know about
this
Upstream way of life is to take a copy
of the C library on
GitHub add on the RO directory some ja
JavaScript B P code and then statically
link using sang to JavaScript then web
pack do you know what is w i
ASM oh JavaScript was too slow so we
Implement a binary layer virtual CPU in
your
browser so now we compile
C
to WM or C to Java to JavaScript to
WM plan the plan for me simple is to
inject uh we need to use multistream
table to inject JavaScript B plates in
CBR
packages and we use sim link to get the
compilation right then make problem
starting linking mean
using we are ready technically but we
need process and
policy we create binary package that AR
all I need B binary non- Mainer
upload for as
all we do really team
work JavaScript doob when we so
BM and the problem is that I need n
Mainer upload for I pop package for
JavaScript policy process if I went to
compile to WM Li Z I need so it's not
the mainten work to maintain the
JavaScript Bower
plate and WM need to be handled for me
the longterm way will be to have a
partial arh isomorph to arall JavaScript
may need to be
interested
so previous week work I attri to get
salsa to uh to test all my reverse
depths for
me thanks to Josh so here you see no
types script measure s so BMP and I try
everything on salsa automatically you
commit you recom
it's work on progress I need thanks to
Josh I need to Upstream this to salci
infrastructure R team is interested ASW
team also does read team see also and
maybe we will get Auto package test on
salsa okay now next
stream CGS versus MGS is two JavaScript
way of plugin that are incompatible
package a in common JavaScript need
package B version two in common
JavaScript Package C in MGS need package
B VRA in
MGS package D need unmade code for link
A and B andac statically everything here
we lost security team
so we create a fin rer that convert MGS
to CGS so only one sources
version if bv2 and vitra are a
compatible but not AB compatible it
work now we will talk a large part of
problem that is problem between share
and keyboard
every I think there are no lot of talk
about this but some VM s are lost but
included in major project but are said
safe because they they were compilated
from R but sources are
lost Implement another thing that is
really funny some people impl
cryptographic uh procedure in
JavaScript because they need it for
wallet of coin in the
Brower uh sorry but Gade multiplication
is sensitive to time Channel attack and
I cannot prove that virtual machine is
time sensitive safe because it's like
proving Val
problem so sorry no way interpersonal
problem I will not talk
about a pack package was banned for npm
due to security problem and need an appy
change in order to be secure I do not
want to update th I created a new
package from B verion with a new
name philosophical open problem about
code Beauty I have some FR due to some
tab
usage and I'm that cut Source new
program web pack are bad so we invent a
new a new warer
tshai TSH need some package I they need
ja V2 but need package B
comp Jack V V3 TI need to be comped
boing L problem I need a time
machine because Upstream made andmade
par that does not publish
uh and this the problem is that also I
need a DOT expert in order to avoid Loop
in Reverse depth we have bootstrapping L
conclusion we could not avoid JavaScript
we need it for taxes declaration and for
me I need it for the food of my to
choose the food of my side at the
school so JavaScript team is small help
is welcome we solve real problem in the
de infrastructure we solve security
problem we are only three French guy cap
Y and
myself longterm goal my long it Ro
compile Firefox from Debian sources and
chromium any question
[Applause]
yeah yeah uh elut as Alpha question
because we only have five seconds thank
you I think you mentioned built using on
one of your slides are you aware of the
distinction introduced by the go team
between static buildt using and built
using one is for licensing reasons and
one is for
security and we use it for static
linking yeah so consider replacing that
with a different head of static build
using inspired by the go team okay so we
need to
PCH thank you for the idea I think we
are down in time uh it's um uh lunchtime
um there's cheese stuff okay see you
soon thank you
[Applause]