[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]