+ All Categories
Home > Documents > Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it,...

Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it,...

Date post: 02-Jan-2021
Category:
Upload: others
View: 1 times
Download: 0 times
Share this document with a friend
110
Linux Kernel Maintainers Greg Kroah-Hartman [email protected]
Transcript
Page 1: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Linux Kernel Maintainers

Greg [email protected]

Page 2: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Why are they so grumpy?

What you can do to avoid this.

What maintainers owe you.

2.6.20 to 2.6.24­rc8

Page 3: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

2,833 developers 373 companies

Kernel releases 3.0.0 – 3.4.0May 2011 – May 2012

Page 4: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

5.79 changes per hour

2.6.20 to 2.6.24­rc8Kernel releases 3.0.0 – 3.4.0May 2011 – May 2012

Page 5: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

7.21 changes per hour

3.4.0 release

2.6.20 to 2.6.24­rc8

Page 6: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have
Page 7: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Patches I received in the past 2 weeks

2.6.20 to 2.6.24­rc8

Page 8: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Patches I received in the past 2 weeks

487

2.6.20 to 2.6.24­rc8

Page 9: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Subject: [PATCH 48/48] ...

2.6.20 to 2.6.24­rc8

Page 10: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

15 patch series, no order given

2.6.20 to 2.6.24­rc8

Page 11: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Patches 1, 3-10

2.6.20 to 2.6.24­rc8

Page 12: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

“Signed-off-by:” in signature

2.6.20 to 2.6.24­rc8

Page 13: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Signature saying email was confidential

2.6.20 to 2.6.24­rc8

Page 14: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Tabs were converted to spaces

2.6.20 to 2.6.24­rc8

Page 15: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Leading spaces removed

2.6.20 to 2.6.24­rc8

Page 16: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

diff in non-unified format

2.6.20 to 2.6.24­rc8

Page 17: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Patch created in driver directory

2.6.20 to 2.6.24­rc8

Page 18: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Patch created in /usr/src/linux-2.6.32

2.6.20 to 2.6.24­rc8

Page 19: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Made against different tree

2.6.20 to 2.6.24­rc8

Page 20: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Wrong coding style

2.6.20 to 2.6.24­rc8

Page 21: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Wrong coding style,and acknowledged it

2.6.20 to 2.6.24­rc8

Page 22: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Would not compile

2.6.20 to 2.6.24­rc8

Page 23: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Broke the build on patch 3/6

2.6.20 to 2.6.24­rc8

Page 24: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Broke the build on patch 3/6and fixed it on 6/6

2.6.20 to 2.6.24­rc8

Page 25: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Broke the build on patch 5/8

2.6.20 to 2.6.24­rc8

Page 26: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Broke the build on patch 5/8Contained note that fix would be sent later

2.6.20 to 2.6.24­rc8

Page 27: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Patches that had nothing to do with me

2.6.20 to 2.6.24­rc8

Page 28: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

1 patch, 450kb big (4500 lines added)

2.6.20 to 2.6.24­rc8

Page 29: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Obviously wrong kerneldoc

2.6.20 to 2.6.24­rc8

Page 30: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

This was a calm two weeks

2.6.20 to 2.6.24­rc8

Page 31: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

It is in my self-interestto ignore your patch

2.6.20 to 2.6.24­rc8

Page 32: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Give me no excuseto reject your patch

2.6.20 to 2.6.24­rc8

Page 33: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Proper coding style

2.6.20 to 2.6.24­rc8

Page 34: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

scripts/checkpatch.pl clean

2.6.20 to 2.6.24­rc8

Page 35: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Sent to proper people and lists

2.6.20 to 2.6.24­rc8

Page 36: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Sent to proper people and lists

scripts/get_maintainer.pl

2.6.20 to 2.6.24­rc8

Page 37: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Proper Subject:

2.6.20 to 2.6.24­rc8

Page 38: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Proper changelog comment

2.6.20 to 2.6.24­rc8

Page 39: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Description of WHY it is needed

2.6.20 to 2.6.24­rc8

Page 40: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Small incremental change

2.6.20 to 2.6.24­rc8

Page 41: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

“obviously” correct

2.6.20 to 2.6.24­rc8

Page 42: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Which tree it was made against

2.6.20 to 2.6.24­rc8

Page 43: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

If multiple patches, state the order

2.6.20 to 2.6.24­rc8

Page 44: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Has to build properly

2.6.20 to 2.6.24­rc8

Page 45: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Make sure it works, if possible

2.6.20 to 2.6.24­rc8

Page 46: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Don't ignore review comments

2.6.20 to 2.6.24­rc8

Page 47: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Don't resend without saying why

2.6.20 to 2.6.24­rc8

Page 48: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

What I will do for you:

2.6.20 to 2.6.24­rc8

Page 49: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Review your patch within 1-2 weeks

2.6.20 to 2.6.24­rc8

Page 50: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Offer semi-constructive criticism

2.6.20 to 2.6.24­rc8

Page 51: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Let you know the status of your patch

2.6.20 to 2.6.24­rc8

Page 52: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

“Publicly making fun of people is half the fun of open source programming.

In fact the main reason to eschew programming in closed environments is that you can't embarrass people in public.”

– Linus Torvalds

2.6.20 to 2.6.24­rc8

Page 53: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

“Publicly making fun of people is half the fun of open source programming.

In fact the main reason to eschew programming in closed environments is that you can't embarrass people in public.”

– Linus Torvalds

2.6.20 to 2.6.24­rc8

Page 54: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

github.com/gregkh/presentation-maintainer

Page 55: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have
Page 56: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Linux Kernel Maintainers

Greg [email protected]

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.

Page 57: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Why are they so grumpy?

What you can do to avoid this.

What maintainers owe you.

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.

Page 58: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

2,833 developers 373 companies

Kernel releases 3.0.0 – 3.4.0May 2011 – May 2012

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.

Page 59: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

5.79 changes per hour

2.6.20 to 2.6.24­rc8Kernel releases 3.0.0 – 3.4.0May 2011 – May 2012

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?

Page 60: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

7.21 changes per hour

3.4.0 release

2.6.20 to 2.6.24­rc8

This past 3.4 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.

Page 61: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 62: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Patches I received in the past 2 weeks

2.6.20 to 2.6.24­rc8

So, let's look at one of these subsystem maintainers. I maintain the USB, driver core, tty, staging, and a few other various parts of the Linux kernel.

These past 2 weeks is the timeframe when we had our big merge window, when all of the subsystem maintainers sent patches off to Linus. During this time frame, no core kernel developer sends new stuff to subsystem maintainers, as they know they are busy, and nothing that gets sent can really be looked at until after the merge window closes.

So, almost all of the patches I got in the past 2 weeks were not from developers that do a whole lot of kernel work, nor were the, for the most part, large patches with new things being proposed for the kernel.

Page 63: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Patches I received in the past 2 weeks

487

2.6.20 to 2.6.24­rc8

Yeah, that's the number of patches I got during the "slow" period of the kernel development cycle. This does not include the number of messages around those patches as other developers commented on them, or other various things about those patches (like "have you applied my patch yet?" messages.)

Now the large majority of these patches at first glance look just fine. But I took a closer look at them, and here's a short list of the problems in the patches that were sent to me.

Page 64: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Subject: [PATCH 48/48] ...

2.6.20 to 2.6.24­rc8

There were no 47 previous patches sent.

Page 65: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

15 patch series, no order given

2.6.20 to 2.6.24­rc8

Am I supposed to guess?

Page 66: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Patches 1, 3-10

2.6.20 to 2.6.24­rc8

Number 2 never showed up.

Page 67: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

“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.

Page 68: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 69: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 70: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 71: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 72: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 73: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 74: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 75: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 76: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 77: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 78: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 79: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Broke the build on patch 3/6and 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.

Page 80: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 81: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Broke the build on patch 5/8Contained 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.

Page 82: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 83: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 84: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 85: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 86: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

It is in my self-interestto 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.

Page 87: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Give me no excuseto 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:

Page 88: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 89: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 90: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 91: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 92: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 93: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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:

Page 94: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 95: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 96: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

“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!"

Page 97: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 98: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 99: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 100: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 101: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 102: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

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.

Page 103: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

What I will do for you:

2.6.20 to 2.6.24­rc8

So, finally, you created the perfect patch series, took all review into account, and sent it correctly, without corrupting the patch.

What should you expect from me, the subsystem maintainer?

Page 104: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Review your patch within 1-2 weeks

2.6.20 to 2.6.24­rc8

Some subsystem maintainers try to get to patches even faster than this, but with travel and different conferences, the best that I can normally do is about 1-2 weeks.

If I don't respond in that time frame, just ask what is going on. I have no problem with people asking about their patch status. Sometimes patches end up getting dropped on the floor accidentally, and if I'm being slow I have no problem with being called on it, so don't feel bad about checking up on it.

But please wait 1-2 weeks, don't be rude and send a patch at night, and then in the morning send a complaining email asking why it wasn't reviewed already. This happens more than you want to know.

Page 105: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Offer semi-constructive criticism

2.6.20 to 2.6.24­rc8

I can't always promise constructive criticism, but I'll try my best.

Page 106: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Let you know the status of your patch

2.6.20 to 2.6.24­rc8

I have a set of scripts that I got from Andrew Morton that will email you when I apply your patch to one of my development trees saying where it has been applied and when you can expect to see it show up in Linus's tree. There is no reason that all kernel maintainers shouldn't do this, and it's nice to see that more and more are.

But, I know from personal experience, there are maintainers in this room that I send patches to and I never know what happens to them. A few months later I will see them show up in Linus's tree, usually after I forgot about them.

That's not acceptable, and you should not allow this, push back on your subsystem maintainer to use something like this, to keep you informed. Andrew's scripts are public, as are my variations of them, for everyone to use.

Page 107: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

“Publicly making fun of people is half the fun of open source programming.

In fact the main reason to eschew programming in closed environments is that you can't embarrass people in public.”

– Linus Torvalds

2.6.20 to 2.6.24­rc8

Linus said this after I wrote a small rant about some truly horrible Linux kernel driver code that I found online.

It had all sorts of "this code is never to be included in the Linux kernel" warnings all over it, despite it being a Linux kernel driver. And in reading the code, it was obvious why the author never wanted it in the kernel, it was one of the worse things I had ever seen, and that says a lot. After I complained about it, I felt bad, as someone had obviously spent a lot of time on it, but Linus replied with the above quote.

And as always, it turns out that Linus is right.

Page 108: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

“Publicly making fun of people is half the fun of open source programming.

In fact the main reason to eschew programming in closed environments is that you can't embarrass people in public.”

– Linus Torvalds

2.6.20 to 2.6.24­rc8

If that author had ever thought that the code would have been posted publicly, they wouldn't have written such crap. That's what maintainers and public code review is really for in the end, keeping the crap out of the Linux kernel, which benefits everyone involved.

So while it seems that we kernel developers can be a real harsh bunch of people, it is because of that harshness that Linux is as good as it is.

You want us to be tough, because it makes you better programmers in the end, knowing you will have to defend your code.

And that is why I love doing this work, it makes everyone involved produce the best possible code, which in the end, is what matters the most.

Page 109: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

github.com/gregkh/presentation-maintainer

Obligatory Penguin Picture

Page 110: Linux Kernel Development · 2017. 11. 7. · kernel tree at the moment. That maintainer reviews it, and if they accept it, they forward it on to the subsystem maintainer. We have

Recommended