[Music]
thank you
okay good afternoon great to see so many
of you here welcome to this talk
my name is Hano and I am from the
Netherlands and in the Netherlands I
work as an I.T consultant at infosupport
my Twitter handle is at a notify
I thought it was rather clever get
notified about things that hono is doing
but if you don't think the same thing
that's not a problem my wife also
doesn't think it's very clever but I do
so that's good enough for me
um I tweet about stuff that I spend way
too much time on so I tweet about
programming Java I'm a musician so I
also tweet about whenever a pop song
makes me think of software development I
tweet about virtual control stuff stuff
that I encounter in the projects that I
do so if you like that feel free to give
me a follow
now when it comes to Version Control the
topic of today's talk I have come a long
way I mean when I was in college back in
I didn't use git or subversion I did
Version Control by email who recognized
this physical though by email yeah
code repository do a few changes zip it
up send it via meal to your classmates
this is the final version and you get a
reply 10 minutes later no this is the
final version no this is the final
version
you get it when I started my first job
in it 2007 I was really eager to learn
something new in the world of Version
Control but at that place of work they
used Version Control by USB stick
also very modern you know you just put
your chain set on a USB stick walk over
to a Central Computer merge it manually
there over there and go to your
workstation back again with a fresh copy
disaster
thank goodness it's 15 years later today
and I have managed to gain some
experience with proper vertical tool
systems like subversion and git I even
teach a git course at info support a
one-day course where I teach our Junior
colleagues about how to use git as a
developer so lots of command line stuff
and also the pros and cons of
distributed Version Control how it
compares to earlier version systems like
CVS and subversion and this is actually
one of the core slides and it displays
which Version Control Systems have
emerged until now and their publication
date and it tries to put this into
perspective by comparing the publication
date to the most modern phone available
at the time so for example the Nokia
3310 I had one of those who had one of
those
Nokia friends hi
Coral correlates to subversion both this
phone and subversion are indestructible
and the battery was excellent but the
version doesn't have a battery so that
doesn't make any sense at all whereas
CVS published in 1990 obviously ancient
refers to oh this one here it even has a
power block also ancient
um and at the end of one particular
course a student came up to me and she
says I really like that you told us kids
and I'm going to be so happy using it
but it seems like kind of an old system
right I mean it was published in 2005
and back then it was 2019 why are we
still using it 14 years later I mean
isn't that kind of old for a Version
Control System what's going to be the
next big thing
and to be honest I couldn't answer her
question
I wasn't sure I had no idea I thought
well it is probably going to be around
forever well of course I didn't say that
out loud because nothing lasts for
referee in it world right next week
there will be a new JavaScript framework
probably so you you never know so I
couldn't tell her that so and I really
didn't like it so I
decided to investigate it for a bit and
things got kind of out of hand because I
didn't just
tell her the answer I had to investigate
it and the investigation turned into a
conference talk and it's the one you're
attending right now so welcome to you
all thank you for attending and let's
try to find the answer to this student's
question together shall we and I think
to answer a question we have to discover
what factors are influencing the
popularity of Version Control today so
let's take git as an example why do we
think kid became so popular
well if we look at this graph for a
moment we see one of the reasons so this
is a graph of the popularity of surgery
control systems until 2016 and we see
that from the moment that GitHub was
launched right here gets started growing
more rapidly also when bitbucket hosting
service that supported Mercurial
initially but started supporting git
around 2012. get started to rise even
more in popularity so a very important
factor is hosting platform support but I
think there are more reasons for example
killer features so when git was
published it was meant as a replacement
for bitkeeper the only distributed
surgical tool system at the time but it
had a commercial license and so when
this commercial license was also going
to be active for open source development
a lot of new projects emerge Mercurial
and also git so free to use
and it was meant to be be fast so
everyday operations should always take
less than a second is what Lena Stovall
said about this and it would support
easy branching unlike CVS for example in
apprentices CVS it's just a carbon copy
of a directory could take a very long
time with a lot of nesting and small
files
hosting platform support for git is of
course superb I mean there are 18
different websites that offer public
gets repositories as of 2022.
and open source Community Support is
also an important reason I think git has
been the driving force behind Global
open source development with contributor
spread across the globe
and I really like to use these strengths
of git as prediction variables factors
that will influence our prediction for
the next big thing and I would like to
add another one I call it the handicap
of the head start because it's always
the hardest for the top product to
remain the top product only if you
innovate regularly you will remain the
top product and not every product has
managed this for example Internet
Explorer has just been declared kind of
dead right in the start of this year
fail to innovate fail to add tabs
browsing for example during the browser
Wars and it got overtaken by Firefox and
later Google Chrome
um this is the same thing that happens
to subversion or maybe to your favorite
football team I'm A Fine Arts reporter
for the dutchies uh in the in the room
so I really know what it is to get on
top and not stay there I mean we only
get Champions like once in the 18 years
so I really know how this feels when we
put the graph data into a table this is
what we see we see that in 2021 so
person is down to eight percent and get
us up to 74 now the graph didn't last
until 2021 so I had to extrapolate here
for a bit but I think these numbers are
are quite correct
um the question is what will happen in
2032 will get silby the top one well of
course we also have to keep into account
that new products will emerge so let's
add some new products to the mix
in the rest of the talk I'll add two
newer version control systems to this
table and they are called fossil so
let's talk about fossil first
so fossil
has the following features it is a
distributed Version Control System it
was published a few years after git and
it has integrated project management so
box tracking it has a Wiki it has stack
notes sometimes it's called GitHub in a
box so all these all this stuff all
these features you can pull up on your
local development machine through the
command fossil UI I'll show you in a bit
there's no really no not need to use any
third-party products here because you
have a fully featured developer website
available when you use the Version
Control System fossil
so like I said there's this this
built-in web interface and there's also
an auto sync merge mode which means like
in git terms after you commit you
automatically push if there are no
conflicts
but you can also use a manual immersion
mode if you want
and fossil can also show descendants of
a check-in whereas in Git You can only
show ancestors with fossil you can also
use descendants so relationships between
commits actually are bi-directional
and it supports operations on multiple
repositories so if you're doing
microservices and every application is a
separate repository with fossil you can
perform operations on all repositories
that it knows of
and as a pursuit of all history
philosophy which means there is no
rebase in fossil so you can't change the
history would be would also be a very
bad name fossil right for a vertical
control system that could change the
history so
the name is well chosen I think
It Was Written specifically to support
the development of SQL live
and the escrow live project also uses
fossil for their development
and these projects they they
reap the benefits of one another because
fossil just used an sqlite database
for to to store the relationship between
the check-ins
um there are three codes housing at the
chiselab.com so you can use that if you
want to try out fossil but actually
fossil just needs an SQL live database
so I guess any hosting space provider
could provide this and do the job if you
want so kind of flexible
like I said you could just host it
yourself now already for repository in
fossil is like I said a single sqli
database file and it contains relations
between the check-ins so it can produce
both ancestors and descendants so let's
see how fossil work it works in a quick
demo and I'll switch to a different
screen
for you
there we go so we are in an empty
directory right now
let's enlarge it for a bit
um and we're going to create a new
fossil repository right here let's
create a demo
directory and let's create a new
repository now I fuss out the rep the
repository file is kept outside of the
directory so this is different than in
git because in git there's the dot git
folder the nested folder by with fossil
you keep the repository file outside of
the directory
let's change there into demo and then we
have to connect this directory to the
repo file that's in the folder above us
and now we have connected to Connected
them
so let's create a Java file
we have created it right now
and let's just add this file to our
repository we've added it now we can see
the changes if we want there it is and
we can commit like this
just looks like it actually commit minus
M initial commit there we go we've got a
new commit and if we want to see this
developer website we just um we just
performed the command fossil UI and
there it is our fossil UI it shows us
these check-ins and the history of our
repos three you can browse the files if
you want
okay so I've called this file
random.java so the idea is to provide
some random implementation here right so
let's create a class random
and let's have a main method here
that just sends the system out the
result of the random call
right
private and random
and um
well every time I want to generate a
random number I always try to roll die
like in XKCD Comics someone recognizes
it
roll a die to get a random number so I'm
just rolling it to people over there
maybe you can help me out to see
which number it lands on
the result is one ladies and gentlemen
so let's return one generated by a die
guaranteed to be random right
yes thanks
I'll recover that later
okay so let's return to our fossil
repulsory
um
close the UI down
just for the sake of Sanity oh I've
forgotten something here
oh sorry yes the demo effect
thank you folks very much
there we go one I can run again but it
wouldn't be very interesting right so
um let's add this new random
implementation to Fossil
and do a fossil commit again
implementate Implement random there we
go
have we we have committed it right but
the fossil UI isn't running because I
killed it
there we go there's an Implement random
now if you would create a branching
fossil you would also also you could
also based on the check and see its
descendants so this is a short talk I'm
not going to be able to show very much
of that but that's a nice feature of
fossil I think in my opinion
so returning to the slide deck
so
get first fossil actually
fossil is really meant for small scale
teams so the fossil team and the sqlite
team they are both small teams four or
five developers and they all know each
other personally whereas with Git this
is a major Global open source project
um 5000 contributors to the nilinks
kernel so the purpose of these two
vertical tool systems are very different
also the engagement is very Global with
Git and personal with sqlite and with
fossil and the workflow is also very
very different so with Git the workflow
Lieutenant the dictator and Lieutenant
workflow was thought of by Linux
Orville's and and his co-workers
um in this case because the Linda kernel
is so vast
so many lines of code liners only trust
a few specific people for certain parts
of the Linux kernel so that's why he
calls them his lieutenants whereas with
fossil this is a very small team so the
workflow is built on trust
so surely something to think about is
why are most projects using git
a physical tool system that was designed
to support a globally developed open
source major project like the Lincoln
Square gnome because our old projects
actually like that or are a lot of
projects actually like sqlite and fossil
a small-scale team with a limited amount
of team members not saying you should
switch to Fossil I'm just saying maybe
try it out for a change and see if you
like it
okay so the second first control system
is behold time to dive into that and the
first thing we need to address is the
name so it's a Spanish word for a bird
that's native to Mexico and it's a bird
that is known to do collaborative nest
building so I thought they'll kind of
like the analogy of collaboratively
building something using a Version
Control System
and to try different names but this one
is very uniquely googleable and well
they have a fair point so pickle it is
this vertical tool system was first
published in 2015 and it's a it's a
vertical tool system that is patch based
also distributed by the way but the
patch based thing is kind of kind of
neat
um it's based on the sound theory of
patches they've got all these
mathematical proofs that their patch
Theory works and that um that it doesn't
lead to many conflicts with all kinds of
examples I'm not a mathematician but if
you like that stuff you should really
check out their website there it's not
by no means the first batch based
version control system because darks is
also a versatile system based on patches
and but darks never got really quite
popular because it was kind of slow
and one of the main features of before
is to fix the slowness of darks
yeah like I said
um it also has a feature called
interactive recording which means when
you have added files to your in in
behold this is called a batchel edit
files to your patch you can still choose
which parts of the file you want to
include in your chains and which parts
you want to leave out
some quick facts about the who it is
written in Rust which is one of the
faster languages around if you see
language speed comparisons
um and it's been bootstraps in 2017
which means the people at the hall use
bijo as a version console system for
their source code just like the people
at IntelliJ use their own Ides to
develop their own ideas
so they eat their own dog food basically
and you can use free code hosting at
nest.becool.com
their hosting platform is called the
pickle Nest like the birds that do the
collaborative nest building so it all
makes sense now
and like I said
is based on a patch oriented design
so Apache is an intuitive Atomic unit of
work and it focuses on changes instead
of differences between snapshots so this
is what happens with kit you create a
version of a file you create a next
version and get saves the two states of
the file but using changes with the
whole the whole stores the things that
you added or removed from the file not
the files itself
also means that applying or unapplying a
patch doesn't change its identity with
Git it does change its identity when you
want to apply commit to a different
branch it gets a different ID and it's
not exactly the same commit internally
the the contents of the commit will be
similar but it won't be identical
and the end result of applying several
patches and before is always the same
regardless of the order in which they
were applied
and behold does this by keeping track of
dependent patches so if I create a file
in patch one modified in patch 2 when I
want to apply patch 2 to a different
file set
but who knows I have to apply patch 1
first and then after that I'm going to
apply patch 2.
this also means that rebase and merge
don't really exist
applying a patch is just like a flying a
patch and emerge if you really would
want to do a merge between two and
pre-hole a branches called a channel so
a merge between two channels well you
just have to apply the patches that are
the differences between those two
channels but there's not a merge command
and there are certainly no rebase
command
pickle does model conflict so conflicts
can happen but the resolve to resolve a
conflict you just have to add a third
patch on top of the two patches that are
conflicting and because these patches
um
the identities never change you can
always use the third patch that fixes
the conflict on in another spot or add
another channel to fix the same conflict
so you don't have to fix conflicts over
and over again like you sometimes have
with kids
let's make it more visual I think I'll
I'll use the second slide actually
like if commits were Bank transactions
this is what would be the difference
between snapshot and Patch based so if
this is my bank account and my initial
balance is 100 get food store 100 but
who would store
apparently you've gained 100 right now
Euros or dollars doesn't matter
when I get paid by my employer
it's an okay salary it's not much but
you know 300 Euros apparently a git
would store 400 because this is the end
result of the change but the who would
store plus 300 because this is the
actual change
and then I have to pay my heating bill
and of course uh well all balance will
be gone because that's very expensive
nowadays so uh git would store zero and
before we store minus 400. so this is
essentially the difference between
snapshot and Patch based systems
okay so let's demo this for a bit
see how it will work
so here I've got an empty directory with
uh before installed
and the first thing we need to do is
initialize the repository right so let's
run up a hole in a demo we get a new
folder just like with Git so that seems
easy enough
now I want to I want to keep track of
the movies I've seen this is my use case
and this week I'm watching one movie
next week I'll watch another one
so I'll create a channel for next week
and if I'll ask because what channels do
you know
sorry it's called Channel
singular there's a main Channel and a
next week channel so right now we're on
the main channel right so let's
um
create a movies file
well this week
I'm a devox and in my spare time I can
watch the movies I like right because
I'm I'm all alone right now and I was
planning to watch
a movie by Quentin Tarantino
I saw this one was on Netflix it's been
a long time coming I should have seen it
already didn't so
let's make sure it happens this week
right
um let's add let's tell people that this
file exists
and let's record it
like so like record minus m
watched a movie
here we go
now we get a an edit screen it says the
message this is the author this is my
author key it's very it's very inclusive
I can change my name later to henna
instead of Hano and it will still know
that this was me so I really like the
feature
um and here we I can say this line I
need to add this line or I can skip it
and if there will be multiple lines this
is the interactive recourse so I can
comment things out here if I want but
I'm not going to do it right now I'm
just going to save it like this
um
and um
I think I'm going to watch another movie
so let's um
edit it out again
um
movies but this time it will be
the next week and I'll I won't be here I
will be home with my kids and my kids
want to watch The Little Mermaid
so let's
add that movie to our list also
watch another movie
there we go
syntax errors I'm not sure what I did
all this is what I did sorry
now if we ask for the pickle log we see
all the patches that were here right and
what I want to do is take
this patch so I'll copy it right now to
uh to my clipboard
and change channels
to the next week one
because switch channel next week
Channel switch it's Channel switch
should have known that
here we go and of course
those patches are not present in this
channel but I can apply it right now
and what it has happened it has applied
two patches because it can't apply an
addition in a file that wasn't there in
the first place so it knows there's a
dependent patch and I need to apply that
one first and I'm not going to be able
to show you but it's it's just as easy
with unrecording so I can unrecord a
patch and who will know what patches are
dependent of the on recording so that's
really nice
[Music]
um
and uh these are all the commands
actually the command I also like is
credits I really hate the git blame
that's so negative big hole just says
credit you know because developers are
creating good stuff so that's a nice
touch by the whole team yeah I like that
let's return to the slides to wrap the
talk up
foreign
status status can we
here we go can we use this in production
well it has been a research project for
quite some time but it has entered
version 1.0
at beginning of this year and they are
currently in a beta phase so I'm going
to really keep track of that and see if
I can introduce it in all of my projects
right now I've only used it I think for
keeping track of flight decks working on
it with people collaboratively and I
really liked it until now and I think
it's quite promising because
um it is quite simple to work with
patches and you don't get this
this very familiar feeling that oh I've
done something wrong with Git and now my
repository has gone to hell and I don't
know how to fix it these things happen
quite not so often with with the whole a
lot less often actually
but of course there are a few drawbacks
and I'll try to plug them into our
prediction prediction variables
so these were the prediction variables
that we created right just before we did
the demos of fossil and behold killer
features hosting platform supports open
source community support and the
handicap of a head start
now so now that we have seen a bit of
fossil and before let's score them
according to these variables
well when we talk about features I um I
I gave behold the highest score because
I like their fast patch-based versioning
um especially if you're working with in
teams with both Technical and
non-technical contributors it's it could
be very very good for them to to to to
cooperate with a version control system
that doesn't require so much details
about the virtual control system in the
first place like with Git You have to
well basic usage it's fine but when you
do something wrong or something you
didn't intend you need a very bizarre
magic command that you can't remember
and have to Google every every time you
need it
um when so with be cool this could be a
lot easier for them so and I think I
like the show descendants feature of
fossil and also the fact that it focuses
itself on small teams I think there are
more small teams in the world than large
teams
um but I've scored them just a bit lower
so when it comes to hosting capabilities
of course git will win this one because
like I said there are 18 different
places on the internet where you can
host public get repositories and the
Mercurial repositories are all right I
guess there are like seven or eight
um Team Foundation those has only one
Azure devops
um and fossil and before both have one
so
they have the potential to grow but
still it's not their strong suit right
and we have to wait and see how popular
they get
I think git and Mercurial life both
proven that they are superb in
in supporting the open source community
and we have to wait and see how this
goes with uh fossil although I can tell
you already now that because fossil can
also be hosted by yourself at your own
your own service
um that won't will not help them in the
open source Community whereas because
the whole nest and you can share your
projects there so a bit more potential
there
and the dominant projects suffer the
most from the handicap of the have start
so gets a Mercurial suffer the most from
that and when we add it all together I
think that get a mercuro will well they
come up come out okay team Foundation I
don't think we'll be using much of that
anymore especially now that Azure devops
supports kit repositories
uh fossil was staying about the same and
before I think will gain some
so when we have to put this into
percentages of course this is this is a
lot of guesswork right but it's the best
I could do with the data that I have
right now I think we'll see something
like this
so
git has git has a very high top already
and um compared to 2021 I think it will
grow a bit further but suppression won't
grow it will only Decline and Mercurial
will also decline a bit and team
Foundation I think in my git course I
get a lot of people who were used to
team foundation and want to learn git
right now so I think there will also
decline for a bit and I think also
fossil and who will grow for a bit I
think there are good projects I think
they'll gain some Traction in their own
communities but of course we have to
wait and see whether they will gain
Global traction so I put I've put them
at six percent and three percent of
course they all or gases but like I said
it's very much dependent on whether
hosting platforms want to more hosting
platforms want to support these Version
Control Systems
um I've just sorted it by popularity for
your convenience right here
if you're really into the topic I've
compiled a list of articles that I read
in preparation of this talk I also tweet
the slide so you can read them later if
you want
um
basic question at the end of the talk I
think is now what what should I do with
this information well
I one of the things that I learned by
doing research or that actually two of
the things I learned is a lot of
projects are nothing like the Linux
kernel I think most of the projects I
worked on during my working hours were
nothing like the Linens kernel so why
don't you try false over chains and see
if you like it
and secondly get snapshoting and the
situations that you can find yourself in
after doing an operation that you didn't
intend might be too technical for the
average user so why don't you try behoo
for a change maybe for a side project we
work on it with a few people see if you
like it and you can like I said you can
use it because it is production ready
and stable
um it's a short talk so not really much
time for uh public questions but if you
have some you can come see me after the
talk I would like to thank you for your
attention and have a great conference
day
[Applause]
[Music]