The primary authors of strace were:

	Paul Kranenburg <pk@cs.few.eur.nl>
	Branko Lankester <branko@hacktic.nl>
	Rick Sladkey <jrs@world.std.com>

These people have contributed to strace.  Some have reported problems, others
have contributed improvements to the documentation, actual code, provided
information, provided resources, or helped to port strace to new systems.
Those contributions are described in the version control logs and ChangeLog-CVS
file.  If your name has been left out, if you'd rather not be listed, or if
you'd prefer a different address be used, please send a note to the
strace-devel@lists.sourceforge.net mailing list.

	Aaron Ucko <ucko@vax1.rockhurst.edu>
	Abhishek Tiwari <erabhishektiwarics@gmail.com>
	Adrien Kunysz <adrien@kunysz.be>
	Alexey Neyman <stilor@att.net>
	Ali Polatel <alip@exherbo.org>
	Anchit Jain <anchitjain1234@gmail.com>
	Andi Kleen <ak@linux.intel.com>
	Andre McCurdy <armccurdy@gmail.com>
	Andreas Schwab <schwab@linux-m68k.org>
	Anton Blanchard <anton@samba.org>
	Arkadiusz Miskiewicz <misiek@pld.org.pl>
	Aurelien Jacobs <aurel@gnuage.org>
	Bai Weidong <baiwd@cn.fujitsu.com>
	Bart Van Assche <bart.vanassche@sandisk.com>
	Ben Noordhuis <info@bnoordhuis.nl>
	Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
	Bo Kullmar <bk@kullmar.se>
	Cai Fei <caifei@cn.fujitsu.com>
	Carlos O'Donell <carlos@systemhalted.org>
	Carmelo AMOROSO <carmelo.amoroso@st.com>
	Chris Dearman <chris.dearman@imgtec.com>
	Chris Metcalf <cmetcalf@tilera.com>
	Chris Zankel <chris@zankel.net>
	Christian Svensson <blue@cmd.nu>
	D.J. Barrow <djbarrow@de.ibm.com>
	Damien Profeta <damien.profeta@amadeus.com>
	Damir Shayhutdinov <damir@altlinux.ru>
	Daniel P. Berrange <berrange@redhat.com>
	David Daney <ddaney@caviumnetworks.com>
	David Mosberger-Tang <davidm@hpl.hp.com>
	David S. Miller <davem@caip.rutgers.edu>
	David Wilder <wilder@us.ibm.com>
	David Woodhouse <dwmw2@redhat.com>
	Denys Vlasenko <vda.linux@googlemail.com>
	Dmitry V. Levin <ldv@altlinux.org>
	Douglas Mencken <dougmencken@gmail.com>
	Dr. David Alan Gilbert <dgilbert@redhat.com>
	Edgar E. Iglesias <edgar.iglesias@gmail.com>
	Edgar Kaziahmedov <edos@linux.com>
	Elliott Hughes <enh@google.com>
	Elvira Khabirova <lineprinter0@gmail.com>
	Erik Johansson <erik@ejohansson.se>
	Etienne Gemsa <etienne.gemsa@lse.epita.fr>
	Eugene Syromyatnikov <evgsyr@gmail.com>
	Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
	Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
	Fabien Siron <fabien.siron@epita.fr>
	Fei Jie <feij.fnst@cn.fujitsu.com>
	Felix Janda <felix.janda@posteo.de>
	Fernando Luis Vazquez Cao <fernando@oss.ntt.co.jp>
	Florian Lohoff <flo@rfc822.org>
	Frederik Schüler <fs@debian.org>
	Gabor Gombas <gombasg@sztaki.hu>
	Gabriel Laskar <gabriel@lse.epita.fr>
	Ganesan Rajagopal <rganesan@myrealbox.com>
	Gaël Roualland <gael.roualland@iname.com>
	Giedrius Statkevičius <giedrius.statkevicius@gmail.com>
	Gleb Fotengauer-Malinovskiy <glebfm@altlinux.org>
	Grant Edwards <grant.b.edwards@gmail.com>
	Greg Banks <gbanks@pocketpenguins.com>
	H.J. Lu <hongjiu.lu@intel.com>
	Heiko Carstens <heiko.carstens@de.ibm.com>
	Helge Deller <deller@gmx.de>
	Henrik Storner <storner@osiris.ping.dk>
	Holger Hans Peter Freyther <holger@freyther.de>
	Jacob Goense <dugo@xs4all.nl>
	Jakub Bogusz <qboosh@pld-linux.org>
	Jakub Jelinek <jj@ultra.linux.cz>
	James Clarke <jrtc27@jrtc27.com>
	James Cowgill <james410@cowgill.org.uk>
	James Hogan <james.hogan@imgtec.com>
	James Yang <james.yang@freescale.com>
	Jan Kratochvil <jan.kratochvil@redhat.com>
	JayRJoshi <jay.r.joshi100@gmail.com>
	Jeff Mahoney <jeffm@suse.com>
	Jian Zhen <zhenjl@gmail.com>
	JingPiao Chen <chenjingpiao@gmail.com>
	Joe Ilacqua <spike@world.std.com>
	Johannes Stezenbach <js@sig21.net>
	John Hughes <john@Calva.COM>
	John Spencer <maillist-strace@barfooze.de>
	Ju"rgen Fluk <louis@marco.de>
	Juergen Weigert <jnweiger@immd4.informatik.uni-erlangen.de>
	Katerina Koukiou <k.koukiou@googlemail.com>
	Keith Owens <kaos.ocs@gmail.com>
	Keith Thompson <kst@alsys.com>
	Khem Raj <raj.khem@gmail.com>
	Kirill A. Shutemov <kirill@shutemov.name>
	Kyle McMartin <kyle@mcmartin.ca>
	Lai JiangShan <laijs@cn.fujitsu.com>
	Leonard N. Zubkoff <lnz@dandelion.com>
	Linus Torvalds <Linus.Torvalds@cs.helsinki.fi>
	Lubomir Rintel <lkundrak@v3.sk>
	Luca Clementi <luca.clementi@gmail.com>
	Lupe Christoph <lupe@alanya.isar.muc.de>
	Maarten ter Huurne <maarten@treewalker.org>
	Mark Hills <Mark.Hills@framestore.com>
	Mark Wielaard <mjw@redhat.com>
	Marty Leisner <leisner@sdsp.mc.xerox.com>
	Masatake YAMATO <yamato@redhat.com>
	Matt Day <mday@artisoft.com>
	Matthias Pfaller <leo@dachau.marco.de>
	Max Filippov <jcmvbkbc@gmail.com>
	Maxim Shchetynin <maxim@de.ibm.com>
	Maxin B. John <maxin.john@enea.com>
	Michael E Chastain <mec@duracef.shout.net>
	Michael Holzheu <holzheu@de.ibm.com>
	Michael Shigorin <mike@altlinux.org>
	Michail Litvak <mci@owl.openwall.com>
	Michal Ludvig <mludvig@suse.cz>
	Mike Frysinger <vapier@gentoo.org>
	Mike Stroyan <mike.stroyan@hp.com>
	Mikulas Patocka <mpatocka@redhat.com>
	Miroslav Lichvar <mlichvar@redhat.com>
	Muttley Meen <muttley.meen@gmail.com>
	Nahim El Atmani <naam@lse.epita.fr>
	Namhyung Kim <namhyung.kim@lge.com>
	Nate Eldredge <nate@cartsys.com>
	Nate Sammons <nate@users.sourceforge.net>
	Neil Campbell <lists@thebatcave.org.uk>
	Nikolay Marchuk <marchuk.nikolay.a@gmail.com>
	Paolo Bonzini <pbonzini@redhat.com>
	Patrik Jakobsson <patrik.jakobsson@linux.intel.com>
	Paul Mundt <lethal@linux-sh.org>
	Pavel Machek <pavel@ucw.cz>
	Peter Jones <pjones@redhat.com>
	Philippe De Muyter <phdm@macqel.be>
	Philippe Ombredanne <pombredanne@nexb.com>
	Pádraig Brady <P@draigBrady.com>
	Quentin Monnet <quentin.monnet@6wind.com>
	Rajeev V. Pillai <rajeevvp@gmail.com>
	Ralf Baechle <ralf@linux-mips.org>
	Randolph Chung <tausq@debian.org>
	Reuben Sumner <rasumner@undergrad.math.uwaterloo.ca>
	Richard Braakman <dark@xs4all.nl>
	Richard Henderson <richard@twiddle.tamu.edu>
	Richard Hirst <rhirst@linuxcare.com>
	Richard W.M. Jones <rjones@redhat.com>
	Rishi Bhatt <bhatt.rishi062@gmail.com>
	Roland Borde <bo@uebemc.siemens.de>
	Roland McGrath <roland@redhat.com>
	Romain Naour <romain.naour@smile.fr>
	Sami Farin <safari@u.safari.iki.fi>
	Sandhya Bankar <bankarsandhya512@gmail.com>
	Scott Tsai <scottt958@yahoo.com.tw>
	Sean Stangl <sstangl@mozilla.com>
	Sebastian Pipping <sebastian@pipping.org>
	Seraphime Kirkovski <kirkseraph@gmail.com>
	Sergei Trofimovich <slyfox@gentoo.org>
	Simon Murray <simon@transitive.com>
	Solar Designer <solar@openwall.com>
	Srinivasa Ds <srinivasa@in.ibm.com>
	Stanislav Brabec <sbrabec@suse.cz>
	Stefan Sørensen <stefan.sorensen@spectralink.com>
	Steve Bennett <steveb@workware.net.au>
	Steve McIntyre <steve.mcintyre@linaro.org>
	Szabolcs Nagy <nsz@port70.net>
	Thanh Ma <tma@encore.com>
	Thiemo Seufer <ths@networkno.de>
	Thomas Bogendoerfer <tsbogend@bigbug.franken.de>
	Thomas De Schampheleire <thomas.de.schampheleire@gmail.com>
	Tim Yamin <plasmaroo@gentoo.org>
	Timo Lindfors <timo.lindfors@iki.fi>
	Tom Dyas <tdyas@eden.rutgers.edu>
	Tommi Rantala <ext-tommi.1.rantala@nokia.com>
	Topi Miettinen <Topi.Miettinen@nic.fi>
	Ulrich Drepper <drepper@redhat.com>
	Vicente Olivert Riera <vincent@gentoo.org>
	Victor Krapivensky <krapivenskiy.va@phystech.edu>
	Vineet Gupta <Vineet.Gupta1@synopsys.com>
	Wang Chao <wang.chao@cn.fujitsu.com>
	Wichert Akkerman <wichert@deephackmode.org>
	William Manley <william.manley@youview.com>
	Xiaoning Ding <dingxn@gmail.com>
	Yang Zhiguo <yzgcsu@cn.fujitsu.com>
	Zach Brown <zach.brown@oracle.com>
	Zev Weiss <zev@bewilderbeest.net>
	Zhang Le <zhilg@users.sourceforge.net>
	Zubin Mithra <zubin.mithra@gmail.com>
	Марк Коренберг <socketpair@gmail.com>
