coccinelle: 10 years of automated evolution in the linux ... · coccinelle developers outreachy...
TRANSCRIPT
![Page 1: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/1.jpg)
Coccinelle: 10 Years of Automated Evolution in the
Linux Kernel
Julia Lawall, Gilles Muller (Inria/LIP6)
October 23, 2018
1
![Page 2: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/2.jpg)
Context
The Linux kernel:
• Open source OS kernel, used in smartphones to supercomputers.
• 16MLOC and rapidly growing.
• Frequent changes to improve correctness and performance.
Issues:
• How to perform evolutions in such a large code base?
• Once a bug is found, how to check whether it occurs elsewhere?
2
![Page 3: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/3.jpg)
How to better maintain large code bases?
Patches: The key to reasoning about change in the Linux kernel.
From:
@@ -1348,8 +1348 ,7 @@
- fh = kmalloc(sizeof(struct zoran_fh), GFP_KERNEL );
+ fh = kzalloc(sizeof(struct zoran_fh), GFP_KERNEL );
if (!fh) {
dprintk(1,
KERN_ERR "%s: zoran_open (): allocation of zoran_fh failed\n",
ZR_DEVNAME(zr));
return -ENOMEM;
}
- memset(fh, 0, sizeof(struct zoran_fh ));
SmPL = Semantic Patch Language
Coccinelle applies SmPL semantic patches across a code base.
Development began in 2006, first released in 2008.
3
![Page 4: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/4.jpg)
Coccinelle
A SmPL idea: Raise the level of abstraction to semantic patches.
From:
@@ -1348,8 +1348 ,7 @@
- fh = kmalloc(sizeof(struct zoran_fh), GFP_KERNEL );
+ fh = kzalloc(sizeof(struct zoran_fh), GFP_KERNEL );
if (!fh) {
dprintk(1,
KERN_ERR "%s: zoran_open (): allocation of zoran_fh failed\n",
ZR_DEVNAME(zr));
return -ENOMEM;
}
- memset(fh, 0, sizeof(struct zoran_fh ));
SmPL = Semantic Patch Language
Coccinelle applies SmPL semantic patches across a code base.
Development began in 2006, first released in 2008.
4
![Page 5: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/5.jpg)
Coccinelle
A SmPL idea: Raise the level of abstraction to semantic patches.
To:
@@
expression x,E1,E2;
@@
- x = kmalloc(E1 ,E2);
+ x = kzalloc(E1,E2);
...
- memset(x, 0, E1);
• SmPL = Semantic Patch Language
• Coccinelle applies SmPL semantic patches across a code base.
• Development began in 2006, first released in 2008. 5
![Page 6: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/6.jpg)
Usage in the Linux kernel
2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017
0
200
400
#ofco
mmits
Coccinelle developers Outreachy interns Dedicated user0-day Kernel maintainers Others
• Over 5500 commits.
• 44% of the 88 kernel developers who have at least one commit that touches
100 files also have at least one commit that uses Coccinelle.
• 59 semantic patches in the Linux kernel, usable via make coccicheck.
6
![Page 7: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/7.jpg)
How did we get here?
7
![Page 8: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/8.jpg)
Design dimensions
• Expressivity
• Performance
• Correctness guarantees
• Dissemination
Did we make the right decisions?8
![Page 9: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/9.jpg)
Coccinelle design: expressivity
Original hypothesis: Linux kernel developers will find it easy and convenient to describe
needed code changes in terms of fragments of removed and added code.
@@
expression x,E1,E2;
@@
- x = kmalloc(E1 ,E2);
+ x = kzalloc(E1,E2);
...
- memset(x, 0, E1);
9
![Page 10: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/10.jpg)
Expressivity evolutions
Confrontation with the real world:
• Many language evolutions: C features, metavariable types, etc.
• Position variables.
– Record and match position of a token.
• Scripting language rules.
– Original goal: bug finding, eg buffer overflows.
– Used in practice for error reporting, counting, etc.
10
![Page 11: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/11.jpg)
Position variables and scripts
@ r @
expression object;
position p
@@
(
drm_connector_reference@p(object)
|
drm_connector_unreference@p(object)
)
@script:python@
object << r.object;
p << r.p;
@@
msg=" WARNING: use get/put helpers to reference and dereference %s" % (object)
coccilib.report.print_report(p[0], msg)
11
![Page 12: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/12.jpg)
Status: Use of new features
• 3325 commits contain semantic patches.
• 18% use position variables.
• 5% use scripts.
• 43% of the semantic patches using position variables or scripts are from outside
the Coccinelle team.
• All 59 semantic patches in the Linux kernel use both.
12
![Page 13: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/13.jpg)
Coccinelle design: performance
Goal: Be usable on a typical developer laptop.
Target code base: 5MLOC in Feb 2007, 16.5MLOC in Jan 2018.
Original design choices:
• Intraprocedural, one file at a time.
• Process only .c files, by default.
• Include only local or same-named headers, by default.
• No macro expansion, instead use heuristics to parse macro uses.
• Provide best-effort type inference, but no other program analysis.
13
![Page 14: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/14.jpg)
Performance evolutions
Confrontation with the real world:
• 1, 5, or 15 MLOC is a lot of code.
• Parsing is slow, because of backtracking heuristics.
Evolutions:
• Indexing, via glimpse, id-utils.
• Parallelism, via parmap.
14
![Page 15: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/15.jpg)
Performance evolutions
Confrontation with the real world:
• 1, 5, or 15 MLOC is a lot of code.
• Parsing is slow, because of backtracking heuristics.
Evolutions:
• Indexing, via glimpse, id-utils.
• Parallelism, via parmap.
14
![Page 16: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/16.jpg)
Status: Performance
0
2,000
4,000
semantic patchesel
apse
dti
me
(sec
.)
2 cores (4 threads). i5 CPU 2.30GHz
0
20,000
40,000
semantic patches
nu
mb
ero
ffi
les
files considered
Based on the 59 semantic patches in the Linux kernel.
15
![Page 17: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/17.jpg)
Coccinelle design: correctness guarantees
Ensure that outermost terms are replaced by like outermost terms
@@
expression x,E1,E2 ,E3;
@@
- x = kmalloc(E1 ,E2);
+ x = kzalloc(E1,E2);
...
- memset(x, 0, E1);
No other correctness guarantees:
• Bug fixes and evolutions may not be semantics preserving.
• Improves expressiveness and performance.
• Rely on developer’s knowledge of the code base and ease of creating and refining
semantic patches.
16
![Page 18: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/18.jpg)
Correctness guarantee evolutions
Confrontation with the real world:
Mostly, developer control over readable rules is good enough.
17
![Page 19: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/19.jpg)
Coccinelle design: dissemination strategy
Show by example:
• June 1, 2007: Fix parse errors in kernel code.
• July 6, 2007: Irq function evolution
– Updates in 5 files, in net, atm, and usb
• July 19, 2007: kmalloc + memset −→ kzalloc
– Updates to 166 calls in 146 files.
– A kernel developer responded “Cool!”.
– Violated patch-review policy of Linux.
• July 2008: Use by a non-Coccinelle developer.
• October 2008: Open-source release.
18
![Page 20: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/20.jpg)
Coccinelle design: dissemination strategy
Show by example:
• June 1, 2007: Fix parse errors in kernel code.
• July 6, 2007: Irq function evolution
– Updates in 5 files, in net, atm, and usb
• July 19, 2007: kmalloc + memset −→ kzalloc
– Updates to 166 calls in 146 files.
– A kernel developer responded “Cool!”.
– Violated patch-review policy of Linux.
• July 2008: Use by a non-Coccinelle developer.
• October 2008: Open-source release.
@ rule1 @
identifier fn , irq , dev_id;
typedef irqreturn_t;
@@
static irqreturn_t
fn(int irq , void *dev_id)
{ ... }
@@
identifier rule1.fn;
expression E1 , E2 , E3;
@@
fn(E1, E2
- ,E3
)
19
![Page 21: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/21.jpg)
Dissemination strategy evolutions
Confrontation with the real world:
• Showing by example generated initial interest.
• Organized four workshops: industry participants.
• Presentations at developer conferences: FOSDEM, Linux Plumbers, etc.
• LWN articles by kernel developers.
20
![Page 22: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/22.jpg)
Impact: Changed lines
arch
blo
ck
cryp
to
dri
vers fs
incl
ud
e
init
ipc
kern
el lib
mm
net
sam
ple
s
secu
rity
sou
nd
too
ls
virt
101
103
105
lines
of
cod
e(l
og
scal
e)Removed lines Added lines
21
![Page 23: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/23.jpg)
Impact: Maintainer use
2008 2009 2010 2011 2012 2013 2014 2015 2016 2017
0
100
200
300
number
ofco
mmits Cleanups
Bug fixes
22
![Page 24: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/24.jpg)
Impact: Maintainer use examples
TTY. Remove an unused function argument.
• 11 affected files.
DRM. Eliminate a redundant field in a data structure.
• 54 affected files.
Interrupts. Prepare to remove the irq argument from interrupt handlers, and then
remove that argument.
• 188 affected files.
23
![Page 25: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/25.jpg)
Impact: Some recent commits made using Coccinelle
• Wolfram Sang: tree-wide: simplify getting .drvdata: LKML, April 19, 2018
• Kees Cook: treewide: init timer() -> setup timer(): b9eaf1872222
• Deepa Dinamani: vfs: change inode times to use struct timespec64:
95582b008388
24
![Page 26: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/26.jpg)
Impact: Intel’s 0-day build-testing service
59 semantic patches in the Linux kernel with a dedicated make target.
2013 2014 2015 2016 2017
0
200
400
#w
ith
pat
ches
api free iterators locks null tests misc
2013 2014 2015 2016 2017
0
100
200
#w
ith
mes
sag
eo
nly
25
![Page 27: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/27.jpg)
Coccinelle community
25 contributors
• Most from the Coccinelle team, due to use of OCaml and PL concepts.
• Active mailing list ([email protected]).
Availability
• Packaged for many Linux distros.
Use outside Linux
• RIOT, systemd, qemu, zephyr (in progress), etc.
26
![Page 28: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/28.jpg)
Offshoots: JMake
How do you know if the code you have changed has been checked by the compiler?
• JMake uses heuristics to choose a suitable configuration and mutations to check
that changed lines are compiled.
• Published in DSN 2017
• http://jmake-release.gforge.inria.fr
27
![Page 29: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/29.jpg)
Offshoots: JMake
How do you know if the code you have changed has been checked by the compiler?
• JMake uses heuristics to choose a suitable configuration and mutations to check
that changed lines are compiled.
• Published in DSN 2017
• http://jmake-release.gforge.inria.fr
27
![Page 30: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/30.jpg)
Offshoots: JMake
How do you know if the code you have changed has been checked by the compiler?
• JMake uses heuristics to choose a suitable configuration and mutations to check
that changed lines are compiled.
• Published in DSN 2017
• http://jmake-release.gforge.inria.fr
27
![Page 31: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/31.jpg)
Offshoots: JMake
How do you know if the code you have changed has been checked by the compiler?
• JMake uses heuristics to choose a suitable configuration and mutations to check
that changed lines are compiled.
• Published in DSN 2017
• http://jmake-release.gforge.inria.fr
27
![Page 32: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/32.jpg)
Offshoots: Prequel
Julia (2011?): Here’s a patch to fix a missing kfree.
Helpful kernel maintainer:
That looks OK, but the code should really be using devm kzalloc
Julia: What’s that???
git grep devm kzalloc???
git log -S devm kzalloc???
28
![Page 33: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/33.jpg)
Offshoots: Prequel
Julia (2011?): Here’s a patch to fix a missing kfree.
Helpful kernel maintainer:
That looks OK, but the code should really be using devm kzalloc
Julia: What’s that???
git grep devm kzalloc???
git log -S devm kzalloc???
28
![Page 34: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/34.jpg)
Offshoots: Prequel
Julia (2011?): Here’s a patch to fix a missing kfree.
Helpful kernel maintainer:
That looks OK, but the code should really be using devm kzalloc
Julia: What’s that???
git grep devm kzalloc???
git log -S devm kzalloc???
28
![Page 35: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/35.jpg)
Offshoots: Prequel
Julia (2011?): Here’s a patch to fix a missing kfree.
Helpful kernel maintainer:
That looks OK, but the code should really be using devm kzalloc
Julia: What’s that???
git grep devm kzalloc???
git log -S devm kzalloc???
28
![Page 36: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/36.jpg)
Offshoots: Prequel
Prequel: patch queries for searching commit histories.
Query:
@@
@@
- kzalloc
+ devm_kzalloc
(...)
Returns the most pertinent commits at the top of the result list.
29
![Page 37: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/37.jpg)
Offshoots: Driver backporting
Prequel for driver backporting:
• Compile driver with the target version.
• Use Gcc-reduce to analyze the error messages and construct patch queries.
• Use Prequel to collect examples of the needed changes.
• Scan through the high-ranked results and figure out how to change the code.
Published at USENIX ATC 2017. Tested on 33 drivers with 75% success.
http://prequel-pql.gforge.inria.fr
30
![Page 38: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/38.jpg)
Offshoots: Driver backporting
Prequel for driver backporting:
• Compile driver with the target version.
• Use Gcc-reduce to analyze the error messages and construct patch queries.
• Use Prequel to collect examples of the needed changes.
• Scan through the high-ranked results and figure out how to change the code.
Published at USENIX ATC 2017. Tested on 33 drivers with 75% success.
http://prequel-pql.gforge.inria.fr
30
![Page 39: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/39.jpg)
Conclusion
• Initial design decisions mostly remain valid, with some extensions.
– Take the expertise of the target users into account.
– Avoid creeping featurism: Do one thing and do it well.
• Tool should be easy to access and install, and easy to use and robust.
• Over 5500 commits in the Linux kernel based on Coccinelle.
• JMake and Prequel inspired by experience with Coccinelle.
• Probably, everyone in this room uses some Coccinelle modified code!
http://coccinelle.lip6.fr
Thanks to ANR, Inria, OSADL, Coccinelle users, and many others!
31
![Page 40: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/40.jpg)
Conclusion
• Initial design decisions mostly remain valid, with some extensions.
– Take the expertise of the target users into account.
– Avoid creeping featurism: Do one thing and do it well.
• Tool should be easy to access and install, and easy to use and robust.
• Over 5500 commits in the Linux kernel based on Coccinelle.
• JMake and Prequel inspired by experience with Coccinelle.
• Probably, everyone in this room uses some Coccinelle modified code!
http://coccinelle.lip6.fr
Thanks to ANR, Inria, OSADL, Coccinelle users, and many others!
31
![Page 41: Coccinelle: 10 Years of Automated Evolution in the Linux ... · Coccinelle developers Outreachy interns Dedicated user 0-day Kernel maintainers Others Over 5500 commits. 44% of the](https://reader030.vdocuments.site/reader030/viewer/2022041021/5ed1345a6c3b557f4e071f48/html5/thumbnails/41.jpg)
Conclusion
• Initial design decisions mostly remain valid, with some extensions.
– Take the expertise of the target users into account.
– Avoid creeping featurism: Do one thing and do it well.
• Tool should be easy to access and install, and easy to use and robust.
• Over 5500 commits in the Linux kernel based on Coccinelle.
• JMake and Prequel inspired by experience with Coccinelle.
• Probably, everyone in this room uses some Coccinelle modified code!
http://coccinelle.lip6.fr
Thanks to ANR, Inria, OSADL, Coccinelle users, and many others! 31