SlideShare une entreprise Scribd logo
1  sur  96
Télécharger pour lire hors ligne
Why I don't want
your code
Linux Kernel Maintainers,
why are they so grumpy
Greg Kroah-Hartman
gregkh@linuxfoudation.org
Top Signed-off-by:
Greg Kroah-Hartman 7004
David S. Miller 3883
Mark Brown 2450
Mauro Carvalho Chehab 2436
John Linville 2213
Linus Torvalds 2193
Andrew Morton 1960
H. Hartley Sweeten 1450
Daniel Vetter 1044
Al Viro 981
Kernel releases 3.4.0 – 3.8.0
2,829 developers
407 companies
Kernel releases 3.4.0 – 3.8.0
March 2012 – Feb 2013
6.98 changes per hour
2.6.20 to 2.6.24­rc8
Kernel releases 3.4.0 – 3.8.0
March 2012 – Feb 2013
7.38 changes per hour
3.8.0 release
2.6.20 to 2.6.24­rc8
Maintainers are like editors in
the publishing industry.
– David Miller
2.6.20 to 2.6.24­rc8
Subject: [PATCH 48/48] ...
2.6.20 to 2.6.24­rc8
15 patch series, no order given
2.6.20 to 2.6.24­rc8
Patches 1, 3-10
2.6.20 to 2.6.24­rc8
“Signed-off-by:” in signature
2.6.20 to 2.6.24­rc8
Signature saying email was confidential
2.6.20 to 2.6.24­rc8
Tabs were converted to spaces
2.6.20 to 2.6.24­rc8
Leading spaces removed
2.6.20 to 2.6.24­rc8
diff in non-unified format
2.6.20 to 2.6.24­rc8
Patch created in driver directory
2.6.20 to 2.6.24­rc8
Patch created in /usr/src/linux-2.6.32
2.6.20 to 2.6.24­rc8
Made against different tree
2.6.20 to 2.6.24­rc8
Wrong coding style
2.6.20 to 2.6.24­rc8
Wrong coding style,
and acknowledged it
2.6.20 to 2.6.24­rc8
Would not compile
2.6.20 to 2.6.24­rc8
Broke the build on patch 3/6
2.6.20 to 2.6.24­rc8
Broke the build on patch 3/6
and fixed it on 6/6
2.6.20 to 2.6.24­rc8
Broke the build on patch 5/8
2.6.20 to 2.6.24­rc8
Broke the build on patch 5/8
Contained note that fix would be sent later
2.6.20 to 2.6.24­rc8
Patches that had nothing to do with me
2.6.20 to 2.6.24­rc8
1 patch, 450kb big (4500 lines added)
2.6.20 to 2.6.24­rc8
Obviously wrong kerneldoc
2.6.20 to 2.6.24­rc8
This was a calm two weeks
2.6.20 to 2.6.24­rc8
It is in my self-interest
to ignore your patch
2.6.20 to 2.6.24­rc8
Give me no excuse
to reject your patch
2.6.20 to 2.6.24­rc8
Proper coding style
2.6.20 to 2.6.24­rc8
scripts/checkpatch.pl clean
2.6.20 to 2.6.24­rc8
Sent to proper people and lists
2.6.20 to 2.6.24­rc8
Sent to proper people and lists
scripts/get_maintainer.pl
2.6.20 to 2.6.24­rc8
Proper Subject:
2.6.20 to 2.6.24­rc8
Proper changelog comment
2.6.20 to 2.6.24­rc8
Description of WHY it is needed
2.6.20 to 2.6.24­rc8
Small incremental change
2.6.20 to 2.6.24­rc8
“obviously” correct
2.6.20 to 2.6.24­rc8
Which tree it was made against
2.6.20 to 2.6.24­rc8
If multiple patches, state the order
2.6.20 to 2.6.24­rc8
Has to build properly
2.6.20 to 2.6.24­rc8
Make sure it works, if possible
2.6.20 to 2.6.24­rc8
Don't ignore review comments
2.6.20 to 2.6.24­rc8
Don't resend without saying why
2.6.20 to 2.6.24­rc8
github.com/gregkh/presentation-maintainer
Why I don't want
your code
Linux Kernel Maintainers,
why are they so grumpy
Greg Kroah-Hartman
gregkh@linuxfoudation.org
Note, this is NOT the final version, please see
the github repo for the final version given
during my talk. The link is in the last slide,
the tag will be Linaro_Hong_Kong_2013
When I first started writing this talk, it quickly
turned into one big long rant. I ended up
listing all of the different problems that I
had with patches that people had sent me
over the past few years.
While this would have been a very fun and
cathartic talk for me, I figured that you all
just watching me complain for 30 minutes
wouldn't be the most entertaining thing, so I
figured I would try to tone it down.
Here's a picture of our development model,
in a simplified form.
We have about 3000 different developers.
They make a patch, and send it through
email to the file/driver maintainer. We have
about 700 different maintainers listed in the
kernel tree at the moment. That maintainer
reviews it, and if they accept it, they forward
it on to the subsystem maintainer. We have
around 130 different subsystem maintainers
at the moment.
Those maintainers have public kernel trees
that all get merged into the linux-next
release every day. Then, when the merge
window opens up, the subsystem
maintainers send their stuff to Linus.
Top Signed-off-by:
Greg Kroah-Hartman 7004
David S. Miller 3883
Mark Brown 2450
Mauro Carvalho Chehab 2436
John Linville 2213
Linus Torvalds 2193
Andrew Morton 1960
H. Hartley Sweeten 1450
Daniel Vetter 1044
Al Viro 981
Kernel releases 3.4.0 – 3.8.0
Greg – driver core, usb, staging
David – networking
Mark – embedded sound
Mauro - v4l
John – wireless networking
Linus - everything
Andrew – everything
Hartley – comedi
Daniel – intel graphics drivers
Al – vfs
2,829 developers
407 companies
Kernel releases 3.4.0 – 3.8.0
March 2012 – Feb 2013
This makes the Linux kernel the largest
contributed body of software out there that
has been created..
This is just the number of companies that we
know about, there are more that we do not,
and as the responses to our inquiries come
in, this number will go up.
6.98 changes per hour
2.6.20 to 2.6.24­rc8
Kernel releases 3.4.0 – 3.8.0
March 2012 – Feb 2013
For that year of development, we went at this
rate, 24 hours a day, 7 days a week. This is
up from last year, which was at 5.2 or so, so
we are increasing, which is scary, right?
7.38 changes per hour
3.8.0 release
2.6.20 to 2.6.24­rc8
This past 3.8 release was the fastest we have
ever created. That number shows just how
well the Linux kernel development model is
working. We are growing in developers and
in how fast we are developing overall.
Now this is just the patches we accepted, not
all of the patches that have been submitted,
lots of patches are rejected, as anyone who
has ever tried to submit a patch can attest
to.
Maintainers are like editors in
the publishing industry.
– David Miller
2.6.20 to 2.6.24­rc8
So, let's talk about the main problem that people
seem to have with Linux kernel maintainers, why
are they so grumpy? Hopefully by the end of this
talk, you will have an idea of why this always
happens, and what you can do to avoid having that
anger be directed at you.
Also, I'm going to cover what you should expect
from a good kernel maintainer, so if you are a
maintainer, here's something that developers can
use to get back at you, and me, as I figure it's only
fair.
I am going to complain a lot in this talk. Please
don't get the impression that I don't like doing this
type of work. I love it. It's the best job in the world
that I've ever had, and I can't think of anything that I
would rather be doing.
Subject: [PATCH 48/48] ...
2.6.20 to 2.6.24­rc8
There were no 47 previous patches sent.
15 patch series, no order given
2.6.20 to 2.6.24­rc8
Am I supposed to guess?
Patches 1, 3-10
2.6.20 to 2.6.24­rc8
Number 2 never showed up.
“Signed-off-by:” in signature
2.6.20 to 2.6.24­rc8
This would require me to hand edit the patch
before I could apply it.
Signature saying email was confidential
2.6.20 to 2.6.24­rc8
That kind of goes against how you are
supposed to be sending Linux kernel
patches out to the world.
Tabs were converted to spaces
2.6.20 to 2.6.24­rc8
This makes applying the patch impossible.
Exchange does this for you, if you are working
for a corporation that has an Exchange
server, do what IBM, Intel, and Microsoft
have done in order to be able to contribute
to Linux kernel development, have a Linux
box somewhere in the corner that your
developers use as a mail server to send
patches out from.
Huawei is the only company that I know of
that successfully sends kernel patches
through an Exchange server, which is
amazing, I really don't know how they do it.
Leading spaces removed
2.6.20 to 2.6.24­rc8
This also makes applying the patch
impossible. I end up editing a lot of patches
by hand, cursing all the while, just to get
them to apply because of broken email
servers and clients.
diff in non-unified format
2.6.20 to 2.6.24­rc8
I honestly didn't know that diff could still
create output in this format anymore, I
assumed that as no one ever found it useful,
it wasn't used anymore.
Patch created in driver directory
2.6.20 to 2.6.24­rc8
Patches need to be created in the root of the
kernel source tree, as that's where I have to
be in order to apply them properly.
This seems to happen a lot to first-time patch
submitters, it's a very common problem.
Patch created in /usr/src/linux-2.6.32
2.6.20 to 2.6.24­rc8
How many different problems can you see
here in just this one example?
Old and obsolete kernel version, full path to
root, developer doing kernel work as root,
probably more.
Made against different tree
2.6.20 to 2.6.24­rc8
Someone made a patch against the scsi
subsystem development tree when sending
me a USB patch. Why they thought that was
a good idea I have no idea.
Wrong coding style
2.6.20 to 2.6.24­rc8
There's no excuse for doing something like
this anymore, we have automated tools that
fix this up for you.
Wrong coding style,
and acknowledged it
2.6.20 to 2.6.24­rc8
At least in this patch, the author knew they
were doing something wrong, It's just that
they thought they were more important than
the 3000 other kernel developers and didn't
have to play by the rules of everyone else.
Would not compile
2.6.20 to 2.6.24­rc8
Just looking at the patch it was obvious that it
had never been compiled, and sure enough,
the compiler spit out a bunch of errors.
Broke the build on patch 3/6
2.6.20 to 2.6.24­rc8
This was a series of patches, and the build
broke on the 3rd patch that was applied.
Broke the build on patch 3/6
and fixed it on 6/6
2.6.20 to 2.6.24­rc8
But, I looked closer, and the developer at
least realized this, and fixed it in their last
patch in the series, thinking that all was
now good, as it didn't really matter that for
the past 3 patches, the build was broken.
Broke the build on patch 5/8
2.6.20 to 2.6.24­rc8
There was another patch series that also
broke the build in the middle of it.
Broke the build on patch 5/8
Contained note that fix would be sent later
2.6.20 to 2.6.24­rc8
But this one was better, it had a note saying
that they knew the build was broken, and
they would fix it up later, at some unknown
time in the future, but these 8 patches
should be accepted now anyway.
Patches that had nothing to do with me
2.6.20 to 2.6.24­rc8
Now I know I maintain a lot of different parts
of the kernel, but for some reason someone
sent me a patch for the x86 core code,
copied to no one else, thinking that I was
the one that could accept it.
1 patch, 450kb big (4500 lines added)
2.6.20 to 2.6.24­rc8
Luckily, another developer told the author
that this was too big and needed to be
broken up into smaller pieces before anyone
would review it. And then, three different
developers went and reviewed it anyway, so
I don't think the author learned that lesson
at all.
Obviously wrong kerneldoc
2.6.20 to 2.6.24­rc8
kerneldoc is the format that you can write
comments in the code and get them
included in the kernel api documentation
that is automatically generated. When you
get the format of it wrong, the tools will tell
you.
Here was someone who was trying to write
documentation, but got the format wrong,
and hadn't even run the tools to see if it was
generated properly.
This was a calm two weeks
2.6.20 to 2.6.24­rc8
Now, I'm not asking you to take pity on me, just
realize that this is the level of incompetence that
every single one of those 700 developers
encounter all the time.
So when you think we are acting grumpy,
remember, how would you act if you had to deal
with this all of the time?
Let's get back to what the goal is here. You want to
create a patch that is accepted as it does
something that you want to do in Linux. The
maintainer wants to reject it.
It is in my self-interest
to ignore your patch
2.6.20 to 2.6.24­rc8
Seriously. It's easier for the maintainer to not
accept your code at all. To accept it, it takes time to
review it, apply it, send it on up the development
chain, handle any problems that might happen with
the patch, accept responsibility for the patch,
possibly fix any problems that happen later on
when you disappear, and maintain it for the next 20
years.
That's a lot of work that you are asking someone
else to do on your behalf. You are asking someone
who doesn't usually work for your company, who
probably lives in a different country, who you have
never met in person, to assume responsibility for
your work, and to do extra work on top of the
normal work they do in the kernel every day.
So you can see how it's in my interest to ignore
your patch. And it's in your interest to keep me
from ignoring it, because you want it accepted.
Give me no excuse
to reject your patch
2.6.20 to 2.6.24­rc8
So your goal is, when sending a patch, is to give
me NO excuse to not accept it. To make it such
that if I ignore it, or reject it, I am the one that is the
problem here, not you.
What can you do to keep me from rejecting your
patch outright
.
First off, don't do any of the things I listed above,
that's obvious, right? But that's a "do not do" list,
how about a list of what to do:
Proper coding style
2.6.20 to 2.6.24­rc8
This is documented, there should not be any
reason to ever get this wrong.
Or to think that you are above following the rules,
that's just asking for the patch to be rejected.
scripts/checkpatch.pl clean
2.6.20 to 2.6.24­rc8
We even have a tool that automatically checks
your patch to ensure that you got the coding
style correct, and that other common
problems are avoided.
If you don't run this tool, the maintainer will,
and will get mad when it finds problems that
you should have solved before sending it to
them.
Sent to proper people and lists
2.6.20 to 2.6.24­rc8
I have an email bot that if you ever send a
patch to only me, and not any mailing list,
instantly rejects it and tells you to resend it
and copy the proper people and mailing
lists.
Linux kernel development is done in public,
not private, and it doesn't scale to send
patches or emails to only individual
developers. We all have subsystem-specific
mailing lists, use them, that way other
people can review your patches, and
comment on them, and you don't
overburden the individual subsystem
maintainers any more than they already are.
Sent to proper people and lists
scripts/get_maintainer.pl
2.6.20 to 2.6.24­rc8
Look, we even have a tool that you run on
your patch, and it digs through the
MAINTAINERS file and the git history, and
figures out who to send the patch to, and
what mailing lists to copy at the same time.
Use it.
Proper Subject:
2.6.20 to 2.6.24­rc8
Make the subject of your patch something
that makes sense.
Don't send me a 20 patch series that for every
individual patch says, "Fixes problems in
driver" like some people have done in the
past.
Proper changelog comment
2.6.20 to 2.6.24­rc8
In the body of the email, describe the patch,
what it does. And most importantly:
Description of WHY it is needed
2.6.20 to 2.6.24­rc8
Too many times we see patches that say
exactly what the patch does. Which is
stupid because we know how to read code,
what we want to know is why the change is
being made, and from that we can
determine if it really is needed or not.
Small incremental change
2.6.20 to 2.6.24­rc8
Patches are not supposed to be big huge
rewrites of things. That's not how we do
development. You need to make each patch
a small one-item change.
Break your larger change up into a set of
small, individual, steps. Like your math
professor said, "show your work". We want
to see all the steps you make along the way
to complete your larger goal.
“obviously” correct
2.6.20 to 2.6.24­rc8
Make it the patch is so simple and obvious that I
would be foolish to reject it. I need to read it and
say, "of course, I can't belive we didn't do that in the
past, how stupid we never did this before!"
Which tree it was made against
2.6.20 to 2.6.24­rc8
If you create a patch against a different
development tree than the person you are
sending it to, let them know. If you made it
against an obsolete vendor enterprise kernel
release, tell them. Don't make them guess.
If you make me guess, I will guess wrong,
that's just the way it goes.
If multiple patches, state the order
2.6.20 to 2.6.24­rc8
Number your patches, don't rely on my email
client receiving them in the same order that
you sent them in. I guarantee that will not
happen properly.
git send-email does this correctly for you, use
that to send your patches out.
Has to build properly
2.6.20 to 2.6.24­rc8
At least build the change before you send it to
me. Because if it breaks the build, it just
makes me more likely to not want to apply
anything else you send me in the future, as
you are just wasting my time.
Make sure it works, if possible
2.6.20 to 2.6.24­rc8
If you have the hardware, test the patch. Now
that isn't always possible, and that's fine, we
make changes to drivers for hardware that
we don't have access to all the time, which
seems to surprise a lot of people.
Go back to that "obviously correct" item, if
you don't have the hardware, stick to that
rule and you will be fine.
Don't ignore review comments
2.6.20 to 2.6.24­rc8
Lots of time I see patches sent out on Friday
afternoon, and then the author disappears
on a 2 week vacation. So, when I spend the
time reviewing the patches, I get back a
vacation bounce message.
And, if the email does go through, don't
ignore it. Acknowledge it, either agreeing
or pushing back on the comments.
If you don't acknowledge the effort I just
spent in reviewing your submission, that will
make me very unlikely to ever want to
review it again in the future.
Don't resend without saying why
2.6.20 to 2.6.24­rc8
If you take my review comments, and resend
the patch, and don't say what you did
different from the first patch submission, I'll
think that you just ignored everything that I
said in the past and just delete the patch
from my mailbox. Based on the patch load I
get, I can't remember what I wrote about
your specific patch, so don't assume that I
do.
github.com/gregkh/presentation-maintainer
Obligatory Penguin Picture
LCA13: Why I Don't Want Your Code

Contenu connexe

Tendances

Analyzing Packages in Docker images hosted On DockerHub
Analyzing Packages in Docker images hosted On DockerHubAnalyzing Packages in Docker images hosted On DockerHub
Analyzing Packages in Docker images hosted On DockerHubAhmed Zerouali
 
Kernel Recipes 2017 - Testing on device with LAVA - Olivier Crête
Kernel  Recipes 2017 - Testing on device with LAVA - Olivier CrêteKernel  Recipes 2017 - Testing on device with LAVA - Olivier Crête
Kernel Recipes 2017 - Testing on device with LAVA - Olivier CrêteAnne Nicolas
 
Grokking Techtalk #39: Gossip protocol and applications
Grokking Techtalk #39: Gossip protocol and applicationsGrokking Techtalk #39: Gossip protocol and applications
Grokking Techtalk #39: Gossip protocol and applicationsGrokking VN
 
Analysis and Exploiting Windows and Linux Security
Analysis and Exploiting Windows and Linux SecurityAnalysis and Exploiting Windows and Linux Security
Analysis and Exploiting Windows and Linux SecurityShubham Dubey
 
Kernel Recipes 2017 - The state of kernel self-protection - Kees Cook
Kernel Recipes 2017 - The state of kernel self-protection - Kees CookKernel Recipes 2017 - The state of kernel self-protection - Kees Cook
Kernel Recipes 2017 - The state of kernel self-protection - Kees CookAnne Nicolas
 
Rooted con 2020 - from the heaven to hell in the CI - CD
Rooted con 2020 - from the heaven to hell in the CI - CDRooted con 2020 - from the heaven to hell in the CI - CD
Rooted con 2020 - from the heaven to hell in the CI - CDDaniel Garcia (a.k.a cr0hn)
 

Tendances (8)

Analyzing Packages in Docker images hosted On DockerHub
Analyzing Packages in Docker images hosted On DockerHubAnalyzing Packages in Docker images hosted On DockerHub
Analyzing Packages in Docker images hosted On DockerHub
 
Kernel Recipes 2017 - Testing on device with LAVA - Olivier Crête
Kernel  Recipes 2017 - Testing on device with LAVA - Olivier CrêteKernel  Recipes 2017 - Testing on device with LAVA - Olivier Crête
Kernel Recipes 2017 - Testing on device with LAVA - Olivier Crête
 
Grokking Techtalk #39: Gossip protocol and applications
Grokking Techtalk #39: Gossip protocol and applicationsGrokking Techtalk #39: Gossip protocol and applications
Grokking Techtalk #39: Gossip protocol and applications
 
Apple IT Managing Containers
Apple IT Managing Containers Apple IT Managing Containers
Apple IT Managing Containers
 
Analysis and Exploiting Windows and Linux Security
Analysis and Exploiting Windows and Linux SecurityAnalysis and Exploiting Windows and Linux Security
Analysis and Exploiting Windows and Linux Security
 
Kernel Recipes 2017 - The state of kernel self-protection - Kees Cook
Kernel Recipes 2017 - The state of kernel self-protection - Kees CookKernel Recipes 2017 - The state of kernel self-protection - Kees Cook
Kernel Recipes 2017 - The state of kernel self-protection - Kees Cook
 
Rooted con 2020 - from the heaven to hell in the CI - CD
Rooted con 2020 - from the heaven to hell in the CI - CDRooted con 2020 - from the heaven to hell in the CI - CD
Rooted con 2020 - from the heaven to hell in the CI - CD
 
12 tricks to avoid hackers breaks your CI / CD
12 tricks to avoid hackers breaks your  CI / CD12 tricks to avoid hackers breaks your  CI / CD
12 tricks to avoid hackers breaks your CI / CD
 

En vedette

Linux Kernel Introduction
Linux Kernel IntroductionLinux Kernel Introduction
Linux Kernel IntroductionSage Sharp
 
LinuxCon NA 2012: Virtualization in the cloud featuring xen
LinuxCon NA 2012: Virtualization in the cloud featuring xenLinuxCon NA 2012: Virtualization in the cloud featuring xen
LinuxCon NA 2012: Virtualization in the cloud featuring xenThe Linux Foundation
 
DevConf 2014 Kernel Networking Walkthrough
DevConf 2014   Kernel Networking WalkthroughDevConf 2014   Kernel Networking Walkthrough
DevConf 2014 Kernel Networking WalkthroughThomas Graf
 
introduction to linux kernel tcp/ip ptocotol stack
introduction to linux kernel tcp/ip ptocotol stack introduction to linux kernel tcp/ip ptocotol stack
introduction to linux kernel tcp/ip ptocotol stack monad bobo
 
The linux networking architecture
The linux networking architectureThe linux networking architecture
The linux networking architecturehugo lu
 
The TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux KernelThe TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux KernelDivye Kapoor
 
LinuxCon 2015 Linux Kernel Networking Walkthrough
LinuxCon 2015 Linux Kernel Networking WalkthroughLinuxCon 2015 Linux Kernel Networking Walkthrough
LinuxCon 2015 Linux Kernel Networking WalkthroughThomas Graf
 

En vedette (7)

Linux Kernel Introduction
Linux Kernel IntroductionLinux Kernel Introduction
Linux Kernel Introduction
 
LinuxCon NA 2012: Virtualization in the cloud featuring xen
LinuxCon NA 2012: Virtualization in the cloud featuring xenLinuxCon NA 2012: Virtualization in the cloud featuring xen
LinuxCon NA 2012: Virtualization in the cloud featuring xen
 
DevConf 2014 Kernel Networking Walkthrough
DevConf 2014   Kernel Networking WalkthroughDevConf 2014   Kernel Networking Walkthrough
DevConf 2014 Kernel Networking Walkthrough
 
introduction to linux kernel tcp/ip ptocotol stack
introduction to linux kernel tcp/ip ptocotol stack introduction to linux kernel tcp/ip ptocotol stack
introduction to linux kernel tcp/ip ptocotol stack
 
The linux networking architecture
The linux networking architectureThe linux networking architecture
The linux networking architecture
 
The TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux KernelThe TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux Kernel
 
LinuxCon 2015 Linux Kernel Networking Walkthrough
LinuxCon 2015 Linux Kernel Networking WalkthroughLinuxCon 2015 Linux Kernel Networking Walkthrough
LinuxCon 2015 Linux Kernel Networking Walkthrough
 

Similaire à LCA13: Why I Don't Want Your Code

Kernel Recipes 2014 - The Linux Kernel, how fast it is developed and how we s...
Kernel Recipes 2014 - The Linux Kernel, how fast it is developed and how we s...Kernel Recipes 2014 - The Linux Kernel, how fast it is developed and how we s...
Kernel Recipes 2014 - The Linux Kernel, how fast it is developed and how we s...Anne Nicolas
 
Kernel Recipes 2017 - Linux Kernel Release Model - Greg KH
Kernel Recipes 2017 - Linux Kernel Release Model - Greg KHKernel Recipes 2017 - Linux Kernel Release Model - Greg KH
Kernel Recipes 2017 - Linux Kernel Release Model - Greg KHAnne Nicolas
 
Kernel Recipes 2016 - Patches carved into stone tablets...
Kernel Recipes 2016 - Patches carved into stone tablets...Kernel Recipes 2016 - Patches carved into stone tablets...
Kernel Recipes 2016 - Patches carved into stone tablets...Anne Nicolas
 
Git_tutorial.pdf
Git_tutorial.pdfGit_tutorial.pdf
Git_tutorial.pdfAliaaTarek5
 
Introduction into 64 bits for the beginners or where's again the 64-bit world?
Introduction into 64 bits for the beginners or where's again the 64-bit world?Introduction into 64 bits for the beginners or where's again the 64-bit world?
Introduction into 64 bits for the beginners or where's again the 64-bit world?PVS-Studio
 
How to Port a 9 Million Code Line Project to 64 bits?
How to Port a 9 Million Code Line Project to 64 bits? How to Port a 9 Million Code Line Project to 64 bits?
How to Port a 9 Million Code Line Project to 64 bits? PVS-Studio
 
Kernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are moneyKernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are moneyAnne Nicolas
 
Maintenance des branches stables du noyau
Maintenance des branches stables du noyauMaintenance des branches stables du noyau
Maintenance des branches stables du noyauAnne Nicolas
 
Source code version control and git
Source code version control and git Source code version control and git
Source code version control and git Naseer Khan Noor
 
The Digital Demise - by Robin Turner
The Digital Demise - by Robin TurnerThe Digital Demise - by Robin Turner
The Digital Demise - by Robin Turnerrobinturner
 
Full Circle 86
Full Circle 86Full Circle 86
Full Circle 86Huehue 1
 
Lightweight APIs in mRuby (Михаил Бортник)
Lightweight APIs in mRuby (Михаил Бортник)Lightweight APIs in mRuby (Михаил Бортник)
Lightweight APIs in mRuby (Михаил Бортник)Fwdays
 
Community building lessons from Ansible
Community building lessons from AnsibleCommunity building lessons from Ansible
Community building lessons from AnsibleGreg DeKoenigsberg
 
Kernel Recipes 2015: The stable Linux Kernel Tree - 10 years of insanity
Kernel Recipes 2015: The stable Linux Kernel Tree - 10 years of insanityKernel Recipes 2015: The stable Linux Kernel Tree - 10 years of insanity
Kernel Recipes 2015: The stable Linux Kernel Tree - 10 years of insanityAnne Nicolas
 
Managing software product versioning with Gitflow, VSTS and Atlassian SourceTree
Managing software product versioning with Gitflow, VSTS and Atlassian SourceTreeManaging software product versioning with Gitflow, VSTS and Atlassian SourceTree
Managing software product versioning with Gitflow, VSTS and Atlassian SourceTreeBosnia Agile
 
Electric Capital Developer Report 2022
Electric Capital Developer Report 2022Electric Capital Developer Report 2022
Electric Capital Developer Report 2022MariaShen2
 
Seven Steps of Migrating a Program to a 64-bit System
Seven Steps of Migrating a Program to a 64-bit SystemSeven Steps of Migrating a Program to a 64-bit System
Seven Steps of Migrating a Program to a 64-bit SystemAndrey Karpov
 
Seven Steps of Migrating a Program to a 64-bit System
Seven Steps of Migrating a Program to a 64-bit SystemSeven Steps of Migrating a Program to a 64-bit System
Seven Steps of Migrating a Program to a 64-bit SystemPVS-Studio
 
Development of resource-intensive applications in Visual C++
Development of resource-intensive applications in Visual C++Development of resource-intensive applications in Visual C++
Development of resource-intensive applications in Visual C++Andrey Karpov
 

Similaire à LCA13: Why I Don't Want Your Code (20)

Kernel Recipes 2014 - The Linux Kernel, how fast it is developed and how we s...
Kernel Recipes 2014 - The Linux Kernel, how fast it is developed and how we s...Kernel Recipes 2014 - The Linux Kernel, how fast it is developed and how we s...
Kernel Recipes 2014 - The Linux Kernel, how fast it is developed and how we s...
 
Kernel Recipes 2017 - Linux Kernel Release Model - Greg KH
Kernel Recipes 2017 - Linux Kernel Release Model - Greg KHKernel Recipes 2017 - Linux Kernel Release Model - Greg KH
Kernel Recipes 2017 - Linux Kernel Release Model - Greg KH
 
Linux Kernel Development
Linux Kernel DevelopmentLinux Kernel Development
Linux Kernel Development
 
Kernel Recipes 2016 - Patches carved into stone tablets...
Kernel Recipes 2016 - Patches carved into stone tablets...Kernel Recipes 2016 - Patches carved into stone tablets...
Kernel Recipes 2016 - Patches carved into stone tablets...
 
Git_tutorial.pdf
Git_tutorial.pdfGit_tutorial.pdf
Git_tutorial.pdf
 
Introduction into 64 bits for the beginners or where's again the 64-bit world?
Introduction into 64 bits for the beginners or where's again the 64-bit world?Introduction into 64 bits for the beginners or where's again the 64-bit world?
Introduction into 64 bits for the beginners or where's again the 64-bit world?
 
How to Port a 9 Million Code Line Project to 64 bits?
How to Port a 9 Million Code Line Project to 64 bits? How to Port a 9 Million Code Line Project to 64 bits?
How to Port a 9 Million Code Line Project to 64 bits?
 
Kernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are moneyKernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are money
 
Maintenance des branches stables du noyau
Maintenance des branches stables du noyauMaintenance des branches stables du noyau
Maintenance des branches stables du noyau
 
Source code version control and git
Source code version control and git Source code version control and git
Source code version control and git
 
The Digital Demise - by Robin Turner
The Digital Demise - by Robin TurnerThe Digital Demise - by Robin Turner
The Digital Demise - by Robin Turner
 
Full Circle 86
Full Circle 86Full Circle 86
Full Circle 86
 
Lightweight APIs in mRuby (Михаил Бортник)
Lightweight APIs in mRuby (Михаил Бортник)Lightweight APIs in mRuby (Михаил Бортник)
Lightweight APIs in mRuby (Михаил Бортник)
 
Community building lessons from Ansible
Community building lessons from AnsibleCommunity building lessons from Ansible
Community building lessons from Ansible
 
Kernel Recipes 2015: The stable Linux Kernel Tree - 10 years of insanity
Kernel Recipes 2015: The stable Linux Kernel Tree - 10 years of insanityKernel Recipes 2015: The stable Linux Kernel Tree - 10 years of insanity
Kernel Recipes 2015: The stable Linux Kernel Tree - 10 years of insanity
 
Managing software product versioning with Gitflow, VSTS and Atlassian SourceTree
Managing software product versioning with Gitflow, VSTS and Atlassian SourceTreeManaging software product versioning with Gitflow, VSTS and Atlassian SourceTree
Managing software product versioning with Gitflow, VSTS and Atlassian SourceTree
 
Electric Capital Developer Report 2022
Electric Capital Developer Report 2022Electric Capital Developer Report 2022
Electric Capital Developer Report 2022
 
Seven Steps of Migrating a Program to a 64-bit System
Seven Steps of Migrating a Program to a 64-bit SystemSeven Steps of Migrating a Program to a 64-bit System
Seven Steps of Migrating a Program to a 64-bit System
 
Seven Steps of Migrating a Program to a 64-bit System
Seven Steps of Migrating a Program to a 64-bit SystemSeven Steps of Migrating a Program to a 64-bit System
Seven Steps of Migrating a Program to a 64-bit System
 
Development of resource-intensive applications in Visual C++
Development of resource-intensive applications in Visual C++Development of resource-intensive applications in Visual C++
Development of resource-intensive applications in Visual C++
 

Plus de Linaro

Deep Learning Neural Network Acceleration at the Edge - Andrea Gallo
Deep Learning Neural Network Acceleration at the Edge - Andrea GalloDeep Learning Neural Network Acceleration at the Edge - Andrea Gallo
Deep Learning Neural Network Acceleration at the Edge - Andrea GalloLinaro
 
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta Vekaria
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta VekariaArm Architecture HPC Workshop Santa Clara 2018 - Kanta Vekaria
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta VekariaLinaro
 
Huawei’s requirements for the ARM based HPC solution readiness - Joshua Mora
Huawei’s requirements for the ARM based HPC solution readiness - Joshua MoraHuawei’s requirements for the ARM based HPC solution readiness - Joshua Mora
Huawei’s requirements for the ARM based HPC solution readiness - Joshua MoraLinaro
 
Bud17 113: distribution ci using qemu and open qa
Bud17 113: distribution ci using qemu and open qaBud17 113: distribution ci using qemu and open qa
Bud17 113: distribution ci using qemu and open qaLinaro
 
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018Linaro
 
HPC network stack on ARM - Linaro HPC Workshop 2018
HPC network stack on ARM - Linaro HPC Workshop 2018HPC network stack on ARM - Linaro HPC Workshop 2018
HPC network stack on ARM - Linaro HPC Workshop 2018Linaro
 
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...Linaro
 
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...Linaro
 
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...Linaro
 
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...Linaro
 
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineHKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineLinaro
 
HKG18-100K1 - George Grey: Opening Keynote
HKG18-100K1 - George Grey: Opening KeynoteHKG18-100K1 - George Grey: Opening Keynote
HKG18-100K1 - George Grey: Opening KeynoteLinaro
 
HKG18-318 - OpenAMP Workshop
HKG18-318 - OpenAMP WorkshopHKG18-318 - OpenAMP Workshop
HKG18-318 - OpenAMP WorkshopLinaro
 
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineHKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineLinaro
 
HKG18-315 - Why the ecosystem is a wonderful thing, warts and all
HKG18-315 - Why the ecosystem is a wonderful thing, warts and allHKG18-315 - Why the ecosystem is a wonderful thing, warts and all
HKG18-315 - Why the ecosystem is a wonderful thing, warts and allLinaro
 
HKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
HKG18- 115 - Partitioning ARM Systems with the Jailhouse HypervisorHKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
HKG18- 115 - Partitioning ARM Systems with the Jailhouse HypervisorLinaro
 
HKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMUHKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMULinaro
 
HKG18-113- Secure Data Path work with i.MX8M
HKG18-113- Secure Data Path work with i.MX8MHKG18-113- Secure Data Path work with i.MX8M
HKG18-113- Secure Data Path work with i.MX8MLinaro
 
HKG18-120 - Devicetree Schema Documentation and Validation
HKG18-120 - Devicetree Schema Documentation and Validation HKG18-120 - Devicetree Schema Documentation and Validation
HKG18-120 - Devicetree Schema Documentation and Validation Linaro
 
HKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted bootHKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted bootLinaro
 

Plus de Linaro (20)

Deep Learning Neural Network Acceleration at the Edge - Andrea Gallo
Deep Learning Neural Network Acceleration at the Edge - Andrea GalloDeep Learning Neural Network Acceleration at the Edge - Andrea Gallo
Deep Learning Neural Network Acceleration at the Edge - Andrea Gallo
 
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta Vekaria
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta VekariaArm Architecture HPC Workshop Santa Clara 2018 - Kanta Vekaria
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta Vekaria
 
Huawei’s requirements for the ARM based HPC solution readiness - Joshua Mora
Huawei’s requirements for the ARM based HPC solution readiness - Joshua MoraHuawei’s requirements for the ARM based HPC solution readiness - Joshua Mora
Huawei’s requirements for the ARM based HPC solution readiness - Joshua Mora
 
Bud17 113: distribution ci using qemu and open qa
Bud17 113: distribution ci using qemu and open qaBud17 113: distribution ci using qemu and open qa
Bud17 113: distribution ci using qemu and open qa
 
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018
 
HPC network stack on ARM - Linaro HPC Workshop 2018
HPC network stack on ARM - Linaro HPC Workshop 2018HPC network stack on ARM - Linaro HPC Workshop 2018
HPC network stack on ARM - Linaro HPC Workshop 2018
 
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...
 
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
 
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
 
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
 
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineHKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
 
HKG18-100K1 - George Grey: Opening Keynote
HKG18-100K1 - George Grey: Opening KeynoteHKG18-100K1 - George Grey: Opening Keynote
HKG18-100K1 - George Grey: Opening Keynote
 
HKG18-318 - OpenAMP Workshop
HKG18-318 - OpenAMP WorkshopHKG18-318 - OpenAMP Workshop
HKG18-318 - OpenAMP Workshop
 
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineHKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
 
HKG18-315 - Why the ecosystem is a wonderful thing, warts and all
HKG18-315 - Why the ecosystem is a wonderful thing, warts and allHKG18-315 - Why the ecosystem is a wonderful thing, warts and all
HKG18-315 - Why the ecosystem is a wonderful thing, warts and all
 
HKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
HKG18- 115 - Partitioning ARM Systems with the Jailhouse HypervisorHKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
HKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
 
HKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMUHKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMU
 
HKG18-113- Secure Data Path work with i.MX8M
HKG18-113- Secure Data Path work with i.MX8MHKG18-113- Secure Data Path work with i.MX8M
HKG18-113- Secure Data Path work with i.MX8M
 
HKG18-120 - Devicetree Schema Documentation and Validation
HKG18-120 - Devicetree Schema Documentation and Validation HKG18-120 - Devicetree Schema Documentation and Validation
HKG18-120 - Devicetree Schema Documentation and Validation
 
HKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted bootHKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted boot
 

Dernier

The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 

Dernier (20)

The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 

LCA13: Why I Don't Want Your Code

  • 1. Why I don't want your code Linux Kernel Maintainers, why are they so grumpy Greg Kroah-Hartman gregkh@linuxfoudation.org
  • 2.
  • 3. Top Signed-off-by: Greg Kroah-Hartman 7004 David S. Miller 3883 Mark Brown 2450 Mauro Carvalho Chehab 2436 John Linville 2213 Linus Torvalds 2193 Andrew Morton 1960 H. Hartley Sweeten 1450 Daniel Vetter 1044 Al Viro 981 Kernel releases 3.4.0 – 3.8.0
  • 4. 2,829 developers 407 companies Kernel releases 3.4.0 – 3.8.0 March 2012 – Feb 2013
  • 5. 6.98 changes per hour 2.6.20 to 2.6.24­rc8 Kernel releases 3.4.0 – 3.8.0 March 2012 – Feb 2013
  • 6. 7.38 changes per hour 3.8.0 release 2.6.20 to 2.6.24­rc8
  • 7. Maintainers are like editors in the publishing industry. – David Miller 2.6.20 to 2.6.24­rc8
  • 8. Subject: [PATCH 48/48] ... 2.6.20 to 2.6.24­rc8
  • 9. 15 patch series, no order given 2.6.20 to 2.6.24­rc8
  • 12. Signature saying email was confidential 2.6.20 to 2.6.24­rc8
  • 13. Tabs were converted to spaces 2.6.20 to 2.6.24­rc8
  • 15. diff in non-unified format 2.6.20 to 2.6.24­rc8
  • 16. Patch created in driver directory 2.6.20 to 2.6.24­rc8
  • 17. Patch created in /usr/src/linux-2.6.32 2.6.20 to 2.6.24­rc8
  • 18. Made against different tree 2.6.20 to 2.6.24­rc8
  • 20. Wrong coding style, and acknowledged it 2.6.20 to 2.6.24­rc8
  • 22. Broke the build on patch 3/6 2.6.20 to 2.6.24­rc8
  • 23. Broke the build on patch 3/6 and fixed it on 6/6 2.6.20 to 2.6.24­rc8
  • 24. Broke the build on patch 5/8 2.6.20 to 2.6.24­rc8
  • 25. Broke the build on patch 5/8 Contained note that fix would be sent later 2.6.20 to 2.6.24­rc8
  • 26. Patches that had nothing to do with me 2.6.20 to 2.6.24­rc8
  • 27. 1 patch, 450kb big (4500 lines added) 2.6.20 to 2.6.24­rc8
  • 29. This was a calm two weeks 2.6.20 to 2.6.24­rc8
  • 30. It is in my self-interest to ignore your patch 2.6.20 to 2.6.24­rc8
  • 31. Give me no excuse to reject your patch 2.6.20 to 2.6.24­rc8
  • 34. Sent to proper people and lists 2.6.20 to 2.6.24­rc8
  • 35. Sent to proper people and lists scripts/get_maintainer.pl 2.6.20 to 2.6.24­rc8
  • 38. Description of WHY it is needed 2.6.20 to 2.6.24­rc8
  • 41. Which tree it was made against 2.6.20 to 2.6.24­rc8
  • 42. If multiple patches, state the order 2.6.20 to 2.6.24­rc8
  • 43. Has to build properly 2.6.20 to 2.6.24­rc8
  • 44. Make sure it works, if possible 2.6.20 to 2.6.24­rc8
  • 45. Don't ignore review comments 2.6.20 to 2.6.24­rc8
  • 46. Don't resend without saying why 2.6.20 to 2.6.24­rc8
  • 48.
  • 49. Why I don't want your code Linux Kernel Maintainers, why are they so grumpy Greg Kroah-Hartman gregkh@linuxfoudation.org Note, this is NOT the final version, please see the github repo for the final version given during my talk. The link is in the last slide, the tag will be Linaro_Hong_Kong_2013 When I first started writing this talk, it quickly turned into one big long rant. I ended up listing all of the different problems that I had with patches that people had sent me over the past few years. While this would have been a very fun and cathartic talk for me, I figured that you all just watching me complain for 30 minutes wouldn't be the most entertaining thing, so I figured I would try to tone it down.
  • 50. Here's a picture of our development model, in a simplified form. We have about 3000 different developers. They make a patch, and send it through email to the file/driver maintainer. We have about 700 different maintainers listed in the kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have around 130 different subsystem maintainers at the moment. Those maintainers have public kernel trees that all get merged into the linux-next release every day. Then, when the merge window opens up, the subsystem maintainers send their stuff to Linus.
  • 51. Top Signed-off-by: Greg Kroah-Hartman 7004 David S. Miller 3883 Mark Brown 2450 Mauro Carvalho Chehab 2436 John Linville 2213 Linus Torvalds 2193 Andrew Morton 1960 H. Hartley Sweeten 1450 Daniel Vetter 1044 Al Viro 981 Kernel releases 3.4.0 – 3.8.0 Greg – driver core, usb, staging David – networking Mark – embedded sound Mauro - v4l John – wireless networking Linus - everything Andrew – everything Hartley – comedi Daniel – intel graphics drivers Al – vfs
  • 52. 2,829 developers 407 companies Kernel releases 3.4.0 – 3.8.0 March 2012 – Feb 2013 This makes the Linux kernel the largest contributed body of software out there that has been created.. This is just the number of companies that we know about, there are more that we do not, and as the responses to our inquiries come in, this number will go up.
  • 53. 6.98 changes per hour 2.6.20 to 2.6.24­rc8 Kernel releases 3.4.0 – 3.8.0 March 2012 – Feb 2013 For that year of development, we went at this rate, 24 hours a day, 7 days a week. This is up from last year, which was at 5.2 or so, so we are increasing, which is scary, right?
  • 54. 7.38 changes per hour 3.8.0 release 2.6.20 to 2.6.24­rc8 This past 3.8 release was the fastest we have ever created. That number shows just how well the Linux kernel development model is working. We are growing in developers and in how fast we are developing overall. Now this is just the patches we accepted, not all of the patches that have been submitted, lots of patches are rejected, as anyone who has ever tried to submit a patch can attest to.
  • 55. Maintainers are like editors in the publishing industry. – David Miller 2.6.20 to 2.6.24­rc8 So, let's talk about the main problem that people seem to have with Linux kernel maintainers, why are they so grumpy? Hopefully by the end of this talk, you will have an idea of why this always happens, and what you can do to avoid having that anger be directed at you. Also, I'm going to cover what you should expect from a good kernel maintainer, so if you are a maintainer, here's something that developers can use to get back at you, and me, as I figure it's only fair. I am going to complain a lot in this talk. Please don't get the impression that I don't like doing this type of work. I love it. It's the best job in the world that I've ever had, and I can't think of anything that I would rather be doing.
  • 56. Subject: [PATCH 48/48] ... 2.6.20 to 2.6.24­rc8 There were no 47 previous patches sent.
  • 57. 15 patch series, no order given 2.6.20 to 2.6.24­rc8 Am I supposed to guess?
  • 59. “Signed-off-by:” in signature 2.6.20 to 2.6.24­rc8 This would require me to hand edit the patch before I could apply it.
  • 60. Signature saying email was confidential 2.6.20 to 2.6.24­rc8 That kind of goes against how you are supposed to be sending Linux kernel patches out to the world.
  • 61. Tabs were converted to spaces 2.6.20 to 2.6.24­rc8 This makes applying the patch impossible. Exchange does this for you, if you are working for a corporation that has an Exchange server, do what IBM, Intel, and Microsoft have done in order to be able to contribute to Linux kernel development, have a Linux box somewhere in the corner that your developers use as a mail server to send patches out from. Huawei is the only company that I know of that successfully sends kernel patches through an Exchange server, which is amazing, I really don't know how they do it.
  • 62. Leading spaces removed 2.6.20 to 2.6.24­rc8 This also makes applying the patch impossible. I end up editing a lot of patches by hand, cursing all the while, just to get them to apply because of broken email servers and clients.
  • 63. diff in non-unified format 2.6.20 to 2.6.24­rc8 I honestly didn't know that diff could still create output in this format anymore, I assumed that as no one ever found it useful, it wasn't used anymore.
  • 64. Patch created in driver directory 2.6.20 to 2.6.24­rc8 Patches need to be created in the root of the kernel source tree, as that's where I have to be in order to apply them properly. This seems to happen a lot to first-time patch submitters, it's a very common problem.
  • 65. Patch created in /usr/src/linux-2.6.32 2.6.20 to 2.6.24­rc8 How many different problems can you see here in just this one example? Old and obsolete kernel version, full path to root, developer doing kernel work as root, probably more.
  • 66. Made against different tree 2.6.20 to 2.6.24­rc8 Someone made a patch against the scsi subsystem development tree when sending me a USB patch. Why they thought that was a good idea I have no idea.
  • 67. Wrong coding style 2.6.20 to 2.6.24­rc8 There's no excuse for doing something like this anymore, we have automated tools that fix this up for you.
  • 68. Wrong coding style, and acknowledged it 2.6.20 to 2.6.24­rc8 At least in this patch, the author knew they were doing something wrong, It's just that they thought they were more important than the 3000 other kernel developers and didn't have to play by the rules of everyone else.
  • 69. Would not compile 2.6.20 to 2.6.24­rc8 Just looking at the patch it was obvious that it had never been compiled, and sure enough, the compiler spit out a bunch of errors.
  • 70. Broke the build on patch 3/6 2.6.20 to 2.6.24­rc8 This was a series of patches, and the build broke on the 3rd patch that was applied.
  • 71. Broke the build on patch 3/6 and fixed it on 6/6 2.6.20 to 2.6.24­rc8 But, I looked closer, and the developer at least realized this, and fixed it in their last patch in the series, thinking that all was now good, as it didn't really matter that for the past 3 patches, the build was broken.
  • 72. Broke the build on patch 5/8 2.6.20 to 2.6.24­rc8 There was another patch series that also broke the build in the middle of it.
  • 73. Broke the build on patch 5/8 Contained note that fix would be sent later 2.6.20 to 2.6.24­rc8 But this one was better, it had a note saying that they knew the build was broken, and they would fix it up later, at some unknown time in the future, but these 8 patches should be accepted now anyway.
  • 74. Patches that had nothing to do with me 2.6.20 to 2.6.24­rc8 Now I know I maintain a lot of different parts of the kernel, but for some reason someone sent me a patch for the x86 core code, copied to no one else, thinking that I was the one that could accept it.
  • 75. 1 patch, 450kb big (4500 lines added) 2.6.20 to 2.6.24­rc8 Luckily, another developer told the author that this was too big and needed to be broken up into smaller pieces before anyone would review it. And then, three different developers went and reviewed it anyway, so I don't think the author learned that lesson at all.
  • 76. Obviously wrong kerneldoc 2.6.20 to 2.6.24­rc8 kerneldoc is the format that you can write comments in the code and get them included in the kernel api documentation that is automatically generated. When you get the format of it wrong, the tools will tell you. Here was someone who was trying to write documentation, but got the format wrong, and hadn't even run the tools to see if it was generated properly.
  • 77. This was a calm two weeks 2.6.20 to 2.6.24­rc8 Now, I'm not asking you to take pity on me, just realize that this is the level of incompetence that every single one of those 700 developers encounter all the time. So when you think we are acting grumpy, remember, how would you act if you had to deal with this all of the time? Let's get back to what the goal is here. You want to create a patch that is accepted as it does something that you want to do in Linux. The maintainer wants to reject it.
  • 78. It is in my self-interest to ignore your patch 2.6.20 to 2.6.24­rc8 Seriously. It's easier for the maintainer to not accept your code at all. To accept it, it takes time to review it, apply it, send it on up the development chain, handle any problems that might happen with the patch, accept responsibility for the patch, possibly fix any problems that happen later on when you disappear, and maintain it for the next 20 years. That's a lot of work that you are asking someone else to do on your behalf. You are asking someone who doesn't usually work for your company, who probably lives in a different country, who you have never met in person, to assume responsibility for your work, and to do extra work on top of the normal work they do in the kernel every day. So you can see how it's in my interest to ignore your patch. And it's in your interest to keep me from ignoring it, because you want it accepted.
  • 79. Give me no excuse to reject your patch 2.6.20 to 2.6.24­rc8 So your goal is, when sending a patch, is to give me NO excuse to not accept it. To make it such that if I ignore it, or reject it, I am the one that is the problem here, not you. What can you do to keep me from rejecting your patch outright . First off, don't do any of the things I listed above, that's obvious, right? But that's a "do not do" list, how about a list of what to do:
  • 80. Proper coding style 2.6.20 to 2.6.24­rc8 This is documented, there should not be any reason to ever get this wrong. Or to think that you are above following the rules, that's just asking for the patch to be rejected.
  • 81. scripts/checkpatch.pl clean 2.6.20 to 2.6.24­rc8 We even have a tool that automatically checks your patch to ensure that you got the coding style correct, and that other common problems are avoided. If you don't run this tool, the maintainer will, and will get mad when it finds problems that you should have solved before sending it to them.
  • 82. Sent to proper people and lists 2.6.20 to 2.6.24­rc8 I have an email bot that if you ever send a patch to only me, and not any mailing list, instantly rejects it and tells you to resend it and copy the proper people and mailing lists. Linux kernel development is done in public, not private, and it doesn't scale to send patches or emails to only individual developers. We all have subsystem-specific mailing lists, use them, that way other people can review your patches, and comment on them, and you don't overburden the individual subsystem maintainers any more than they already are.
  • 83. Sent to proper people and lists scripts/get_maintainer.pl 2.6.20 to 2.6.24­rc8 Look, we even have a tool that you run on your patch, and it digs through the MAINTAINERS file and the git history, and figures out who to send the patch to, and what mailing lists to copy at the same time. Use it.
  • 84. Proper Subject: 2.6.20 to 2.6.24­rc8 Make the subject of your patch something that makes sense. Don't send me a 20 patch series that for every individual patch says, "Fixes problems in driver" like some people have done in the past.
  • 85. Proper changelog comment 2.6.20 to 2.6.24­rc8 In the body of the email, describe the patch, what it does. And most importantly:
  • 86. Description of WHY it is needed 2.6.20 to 2.6.24­rc8 Too many times we see patches that say exactly what the patch does. Which is stupid because we know how to read code, what we want to know is why the change is being made, and from that we can determine if it really is needed or not.
  • 87. Small incremental change 2.6.20 to 2.6.24­rc8 Patches are not supposed to be big huge rewrites of things. That's not how we do development. You need to make each patch a small one-item change. Break your larger change up into a set of small, individual, steps. Like your math professor said, "show your work". We want to see all the steps you make along the way to complete your larger goal.
  • 88. “obviously” correct 2.6.20 to 2.6.24­rc8 Make it the patch is so simple and obvious that I would be foolish to reject it. I need to read it and say, "of course, I can't belive we didn't do that in the past, how stupid we never did this before!"
  • 89. Which tree it was made against 2.6.20 to 2.6.24­rc8 If you create a patch against a different development tree than the person you are sending it to, let them know. If you made it against an obsolete vendor enterprise kernel release, tell them. Don't make them guess. If you make me guess, I will guess wrong, that's just the way it goes.
  • 90. If multiple patches, state the order 2.6.20 to 2.6.24­rc8 Number your patches, don't rely on my email client receiving them in the same order that you sent them in. I guarantee that will not happen properly. git send-email does this correctly for you, use that to send your patches out.
  • 91. Has to build properly 2.6.20 to 2.6.24­rc8 At least build the change before you send it to me. Because if it breaks the build, it just makes me more likely to not want to apply anything else you send me in the future, as you are just wasting my time.
  • 92. Make sure it works, if possible 2.6.20 to 2.6.24­rc8 If you have the hardware, test the patch. Now that isn't always possible, and that's fine, we make changes to drivers for hardware that we don't have access to all the time, which seems to surprise a lot of people. Go back to that "obviously correct" item, if you don't have the hardware, stick to that rule and you will be fine.
  • 93. Don't ignore review comments 2.6.20 to 2.6.24­rc8 Lots of time I see patches sent out on Friday afternoon, and then the author disappears on a 2 week vacation. So, when I spend the time reviewing the patches, I get back a vacation bounce message. And, if the email does go through, don't ignore it. Acknowledge it, either agreeing or pushing back on the comments. If you don't acknowledge the effort I just spent in reviewing your submission, that will make me very unlikely to ever want to review it again in the future.
  • 94. Don't resend without saying why 2.6.20 to 2.6.24­rc8 If you take my review comments, and resend the patch, and don't say what you did different from the first patch submission, I'll think that you just ignored everything that I said in the past and just delete the patch from my mailbox. Based on the patch load I get, I can't remember what I wrote about your specific patch, so don't assume that I do.