[BACK]Return to innovations.html CVS log [TXT][DIR] Up to [local] / www

Annotation of www/innovations.html, Revision 1.78

1.77      bentley     1: <!doctype html>
                      2: <html lang=en>
                      3: <meta charset=utf-8>
                      4:
1.33      tj          5: <title>OpenBSD: Innovations</title>
1.31      deraadt     6: <meta name="viewport" content="width=device-width, initial-scale=1">
                      7: <link rel="stylesheet" type="text/css" href="openbsd.css">
1.35      tb          8: <link rel="canonical" href="https://www.openbsd.org/innovations.html">
1.1       schwarze    9:
1.77      bentley    10: <h2 id=OpenBSD>
                     11: <a href="index.html">
                     12: <i>Open</i><b>BSD</b></a>
                     13: Innovations
                     14: </h2>
1.31      deraadt    15:
                     16: <hr>
1.32      tj         17: <p>
1.59      job        18:     This is a list of software and ideas developed or maintained by the OpenBSD
                     19:     project, sorted in order of approximate introduction. Some of them are
                     20:     explained in detail in our <a href="events.html">research papers</a>.
                     21: </p>
1.32      tj         22: <hr>
1.1       schwarze   23:
1.59      job        24: <h3>Concepts</h3>
1.1       schwarze   25:
                     26: <ul>
1.78    ! deraadt    27:     <li><a href="https://man.openbsd.org/ipsec.4">ipsec(4)</a>:
        !            28:        Started by John Ioannidis, Angelos D. Keromytis, Niels Provos, and
        !            29:        Niklas Hallqvist, imported February 20, 1997.  OpenBSD was the first
        !            30:        free operating system to provide an IPSec stack.
        !            31:     <li><a href="https://man.openbsd.org/inet6.4">inet6(4)</a>:
        !            32:        First complete integration and adoption of IPv6 led by
        !            33:        "Itojun" (Dr. Junichiro Hagino) [WIDE/KAME], Craig Metz [NRL], and
        !            34:        Angelos D. Keromytis starting Jan 6, 1999.
        !            35:        Almost fully operational Jun 6, 1999 during the
        !            36:        <a href="hackathons.html">first OpenBSD hackathon</a>.
        !            37:        OpenBSD 2.7.
        !            38:     <li><strong>Privilege separation</strong>:
        !            39:        First implemented by
        !            40:        <a href="http://www.citi.umich.edu/u/provos/ssh/privsep.html">Niels Provos</a>
        !            41:        and Markus Friedl in OpenSSH in March 2002, released with OpenBSD 3.2.
        !            42:        The concept is now used in many OpenBSD programs, for example
        !            43:        <a href="https://man.openbsd.org/bgpd.8">bgpd(8)</a>,
        !            44:        <a href="https://man.openbsd.org/dhclient.8">dhclient(8)</a>,
        !            45:        <a href="https://man.openbsd.org/dhcpd.8">dhcpd(8)</a>,
        !            46:        <a href="https://man.openbsd.org/dvmrpd.8">dvmrpd(8)</a>,
        !            47:        <a href="https://man.openbsd.org/eigrpd.8">eigrpd(8)</a>,
        !            48:        <a href="https://man.openbsd.org/file.1">file(1)</a>,
        !            49:        <a href="https://man.openbsd.org/httpd.8">httpd(8)</a>,
        !            50:        <a href="https://man.openbsd.org/iked.8">iked(8)</a>,
        !            51:        <a href="https://man.openbsd.org/ldapd.8">ldapd(8)</a>,
        !            52:        <a href="https://man.openbsd.org/ldpd.8">ldpd(8)</a>,
        !            53:        <a href="https://man.openbsd.org/mountd.8">mountd(8)</a>,
        !            54:        <a href="https://man.openbsd.org/npppd.8">npppd(8)</a>,
        !            55:        <a href="https://man.openbsd.org/ntpd.8">ntpd(8)</a>,
        !            56:        <a href="https://man.openbsd.org/ospfd.8">ospfd(8)</a>,
        !            57:        <a href="https://man.openbsd.org/ospf6d.8">ospf6d(8)</a>,
        !            58:        <a href="https://man.openbsd.org/pflogd.8">pflogd(8)</a>,
        !            59:        <a href="https://man.openbsd.org/radiusd.8">radiusd(8)</a>,
        !            60:        <a href="https://man.openbsd.org/relayd.8">relayd(8)</a>,
        !            61:        <a href="https://man.openbsd.org/ripd.8">ripd(8)</a>,
        !            62:        <a href="https://man.openbsd.org/script.1">script(1)</a>,
        !            63:        <a href="https://man.openbsd.org/smtpd.8">smtpd(8)</a>,
        !            64:        <a href="https://man.openbsd.org/syslogd.8">syslogd(8)</a>,
        !            65:        <a href="https://man.openbsd.org/tcpdump.8">tcpdump(8)</a>,
        !            66:        <a href="https://man.openbsd.org/tmux.1">tmux(1)</a>,
        !            67:        <a href="https://man.openbsd.org/xconsole.1">xconsole(1)</a>,
        !            68:        <a href="https://man.openbsd.org/xdm.1">xdm(1)</a>,
        !            69:        <a href="https://man.openbsd.org/Xserver.1">Xserver(1)</a>,
        !            70:        <a href="https://man.openbsd.org/ypldap.8">ypldap(8)</a>,
        !            71:        <a href="https://man.openbsd.org/pkg_add.1">pkg_add(1)</a>,
        !            72:        etc.
        !            73:     <li><strong>Privilege revocation</strong>:
        !            74:        Related to the work on privilege separation, some programs were refactored
        !            75:        to drop privileges while holding onto a tricky resource such as a raw socket,
        !            76:        reserved port, or modification-locked bpf(4) descriptor,
        !            77:        for example
        !            78:        <a href="https://man.openbsd.org/ping.8">ping(8)</a>,
        !            79:        <a href="https://man.openbsd.org/traceroute.8">traceroute(8)</a>,
        !            80:        etc.
        !            81:     <li><strong>Stack protector</strong>:
        !            82:        Developed since 2001 as "propolice" by Hiroaki Etoh. Integrated, and
        !            83:        implemented for additional hardware platforms, by Miod Vallat and Theo
        !            84:        de Raadt.  OpenBSD 3.3 was the first operating system to enable it
        !            85:        systemwide by default.
        !            86:     <li><strong>W^X</strong>:
        !            87:        First used for sparc, sparc64, alpha, and hppa in OpenBSD 3.3.
        !            88:        Strictly enforced by default since OpenBSD 6.0: a program can only
        !            89:        violate it if the executable is marked with <code>PT_OPENBSD_WXNEEDED</code>
        !            90:        and it is located on a filesystem mounted with the <code>wxallowed</code>
        !            91:        <a href="https://man.openbsd.org/mount.8">mount(8)</a> option.
        !            92:     <li><strong>GOT and PLT protection</strong> by ld.so:
        !            93:        first done as part of the W^X work in OpenBSD 3.3, by Dale Rahn and
        !            94:        Theo de Raadt. The GOT and PLT regions are read-only outside of ld.so
        !            95:        itself. Extended to the .init/.fini sections (constructors and
        !            96:        destructors) in OpenBSD 3.4.
        !            97:     <li><strong>ASLR</strong>:
        !            98:        OpenBSD 3.4 was the first widely used operating system to
        !            99:        provide it by default.
        !           100:     <li><a href="https://man.openbsd.org/gcc-local.1">gcc-local(1)</a>
        !           101:        __attribute__((__bounded__)) static analysis annotation
        !           102:        and checking mechanism:
        !           103:        Started by Anil Madhavapeddy on June 26, 2003
        !           104:        and ported to GCC 4 by Nicholas Marriott.
        !           105:        First released with OpenBSD 3.4.
        !           106:     <li><a href="https://man.openbsd.org/malloc.3">malloc(3)</a>
        !           107:        randomization implemented by Thierry Deval. Guard pages and randomized (delayed) free added by Ted Unangst.
        !           108:        Reimplemented by <a href="papers/eurobsdcon2009/otto-malloc.pdf">Otto Moerbeek</a>
        !           109:        for OpenBSD 4.4.
        !           110:     <li><strong>Position-independent executables (PIE)</strong>:
        !           111:        OpenBSD 5.3 was the first widely used operating system to enable it
        !           112:        globally by default, on seven hardware platforms.
        !           113:        Implemented in November 2008 by
        !           114:        <a href="https://www.openbsd.org/papers/nycbsdcon08-pie/">Kurt Miller</a>
        !           115:        and enabled by default by
        !           116:        <a href="https://www.openbsd.org/papers/asiabsdcon2015-pie-slides.pdf">Pascal Stumpf</a>
        !           117:        in August 2012.
        !           118:     <li><strong>Random-data memory</strong>:
        !           119:        the ability to specify that a variable should be initialized
1.68      deraadt   120:        at load time with random byte values (placed into a new ELF
                    121:        <b>.openbsd.randomdata</b> section) was implemented in
                    122:        OpenBSD 5.3 by Matthew Dempsky.
1.78    ! deraadt   123:     <li><strong>Stack protector per shared object</strong>:
        !           124:        using the random-data memory feature, each shared object was given its
        !           125:        own stack protector cookie in OpenBSD 5.3 by Matthew Dempsky.
        !           126:     <li><strong>Static-PIE</strong>:
        !           127:        Position-independent static binaries for /bin, /sbin and ramdisks.
        !           128:        Implemented for OpenBSD 5.7 by Kurt Miller and Mark Kettenis.
        !           129:     <li><strong>SROP</strong>
        !           130:        (<a href="https://man.openbsd.org/sigreturn.2">sigreturn(2)</a>
        !           131:        oriented programming) mitigation: attacks researched by
        !           132:        <a href="http://www.cs.vu.nl/~herbertb/papers/srop_sp14.pdf">Eric Bosman</a>
        !           133:        and Herbert Bos in 2014, solution implemented by Theo de Raadt in May 2016,
        !           134:        enabled by default since OpenBSD 6.0.
        !           135:     <li><strong>Library order randomization</strong>:
        !           136:        In <a href="https://man.openbsd.org/rc.8">rc(8)</a>, re-link
        !           137:        <code>libc.so</code>, <code>libcrypto</code>, and <code>ld.so</code>
        !           138:        on startup, placing the objects in a random order.
        !           139:        Theo de Raadt and Robert Peichaer, May 2016,
        !           140:        enabled by default since OpenBSD 6.0 and 6.2.
        !           141:     <li>Kernel-assisted lazy-binding for W^X safety in multi-threaded programs.
        !           142:        A new syscall <a href="https://man.openbsd.org/kbind.2">kbind(2)</a>
        !           143:        permits lazy-binding to be W^X safe in multi-threaded programs.
        !           144:        Implemented for OpenBSD 5.9 by Philip Guenther in July 2015.
        !           145:     <li>Process layouts in memory tightened to remove execute permission from
        !           146:        all segmented, non-instruction data and to remove write permission from
        !           147:        data that is only modified during loading and relocation.
        !           148:        By combining the RELRO (Read-Only after Relocation) design from the
        !           149:        GNU project with the original ASLR work from OpenBSD 3.3 and
        !           150:        strict lazy-binding work from OpenBSD 5.9, this is applied to not
        !           151:        just a subset of programs and libraries but rather to all programs
        !           152:        and libraries.
        !           153:        Implemented for OpenBSD 6.1 by Philip Guenther in August 2016.
        !           154:     <li>Use of <strong>fork+exec in privilege separated programs</strong>. The
        !           155:        strategy is to give each process a fresh &amp; unique address space for
        !           156:        ASLR, stack protector -- as protection against address space discovery attacks.
        !           157:        Implemented first by
        !           158:        Damien Miller (<a href="https://man.openbsd.org/sshd.8">sshd(8)</a> 2004),
        !           159:        Claudio Jeker (<a href="https://man.openbsd.org/bgpd.8">bgpd(8)</a>, 2015),
        !           160:        Eric Faurot (<a href="https://man.openbsd.org/smtpd.8">smtpd(8)</a>, 2016),
        !           161:        Rafael Zalamena (various, 2016), and others.
        !           162:     <li><strong>trapsleds</strong>:
        !           163:        Reduction of incidental NOP instructions/sequences in the instruction
        !           164:        stream which could be useful potentially for ROP attack methods to
        !           165:        innaccurately target gadgets. These NOP sequences are converted into
        !           166:        trap sequences where possible. Todd Mortimer and Theo de Raadt, June
        !           167:        2017.
        !           168:     <li><strong>Kernel relinking at boot</strong>:
        !           169:        the .o files of the kernel are relinked in random order from a
        !           170:        link-kit, before every reboot. This provides substantial interior
        !           171:        randomization in the kernel's text and data segments for layout and
        !           172:        relative branches/calls.  Basically a unique address space for each
        !           173:        kernel boot, similar to the userland fork+exec model described above
        !           174:        but for the kernel.  Theo de Raadt, June 2017.
1.61      deraadt   175:     <li>
                    176:        Rearranged i386/amd64 register allocator order in
                    177:        <a href="https://man.openbsd.org/clang.1">clang(1)</a>
                    178:        to reduce polymorphic RET instructions:
                    179:        Todd Mortimer, November 20, 2017.
1.64      deraadt   180:     <li>
1.72      mortimer  181:        Reencoding of i386/amd64 instruction sequences to avoid
                    182:        embedded polymorphic RET instructions.  Enhancements to
                    183:        <a href="https://man.openbsd.org/clang.1">clang(1)</a>
                    184:        Todd Mortimer, April 28, 2018 and onwards.
1.78    ! deraadt   185:     <li><b>MAP_STACK</b> addition to
1.64      deraadt   186:        <a href="https://man.openbsd.org/mmap.2">mmap(2)</a>
                    187:        allows opportunistic verification that the stack-register
                    188:        points at stack memory, therefore catching pivots to non-stack
                    189:        memory (sometimes used in ROP attacks).
                    190:        Theo de Raadt, April 12, 2018.
1.78    ! deraadt   191:     <li><b>RETGUARD</b> is a replacement for the <b>stack-protector</b>
        !           192:        which uses a per-function random cookie (located in the read-only ELF
        !           193:        <b>.openbsd.randomdata</b> section) to consistency-check the
        !           194:        return address on the stack.  Implemented for AMD64 and ARM64
        !           195:        by Todd Mortimer in OpenBSD 6.4.
        !           196:     <li><b>MAP_CONCEAL</b> addition to
1.76      otto      197:        <a href="https://man.openbsd.org/mmap.2">mmap(2)</a>
                    198:        disallows memory pages to be written to core dumps, preventing
                    199:        accidental exposure of private information.
                    200:        Theo de Raadt, Mark Kettenis and Scott Soule Cheloha,
                    201:        February 2, 2019.
1.68      deraadt   202:
1.17      mlarkin   203: </ul>
1.1       schwarze  204:
1.59      job       205: <h3>Functions</h3>
1.1       schwarze  206:
                    207: <ul>
1.78    ! deraadt   208:     <li><a href="https://man.openbsd.org/issetugid.2">issetugid(2)</a>:
        !           209:        Theo de Raadt, August 25, 1996, OpenBSD 2.0
        !           210:     <li><a href="https://man.openbsd.org/arc4random.3">arc4random(3)</a>:
        !           211:        David Mazieres, December 28, 1996, OpenBSD 2.1
        !           212:     <li><a href="https://man.openbsd.org/bcrypt.3">bcrypt(3)</a>:
        !           213:        Implemented by <a href="https://www.usenix.org/legacy/events/usenix99/provos/provos_html/node1.html">Niels Provos and David Mazieres</a>
        !           214:        Imported February 13, 1997 and first released with OpenBSD 2.1.
        !           215:     <li><a href="https://man.openbsd.org/strlcpy.3">strlcpy(3)</a>,
        !           216:        <a href="https://man.openbsd.org/strlcat.3">strlcat(3)</a>:
        !           217:        Todd Miller and Theo de Raadt, July 1, 1998, OpenBSD 2.4
        !           218:     <li><a href="https://man.openbsd.org/strtonum.3">strtonum(3)</a>:
        !           219:        Ted Unangst, Todd Miller, and Theo de Raadt, May 3, 2004, OpenBSD 3.6
        !           220:     <li><a href="https://man.openbsd.org/imsg_init.3">imsg</a>:
        !           221:        Message passing API, written by Henning Brauer.
        !           222:        In libutil since May 26, 2010, OpenBSD 4.8;
        !           223:        used by various daemons before that.
        !           224:     <li><a href="https://man.openbsd.org/timingsafe_bcmp.3">timingsafe_bcmp(3)</a>:
        !           225:        Damien Miller, July 13, 2010, OpenBSD 4.9
        !           226:     <li><a href="https://man.openbsd.org/explicit_bzero.3">explicit_bzero(3)</a>:
        !           227:        Ted Unangst and Matthew Dempsky, January 22, 2014, OpenBSD 5.5
        !           228:     <li><a href="https://man.openbsd.org/ohash_init.3">ohash</a>:
        !           229:        Written and maintained by Marc Espie.
        !           230:        In libutil since May 12, 2014, OpenBSD 5.6;
        !           231:        used by make(1) and m4(1) before that.
        !           232:     <li><a href="https://man.openbsd.org/asr_run.3">asr</a>:
        !           233:        Replacement resolver written and maintained by Eric Faurot.
        !           234:        Imported April 14, 2012; activated on March 26, 2014, OpenBSD 5.6.
        !           235:     <li><a href="https://man.openbsd.org/reallocarray.3">reallocarray(3)</a>:
        !           236:        Theo de Raadt and Ted Unangst, April 22, 2014, OpenBSD 5.6
        !           237:     <li><a href="https://man.openbsd.org/getentropy.2">getentropy(2)</a>:
        !           238:        Matthew Dempsky and Theo de Raadt, June 13, 2014, OpenBSD 5.6
        !           239:     <li><a href="https://man.openbsd.org/sendsyslog.2">sendsyslog(2)</a>:
        !           240:        Theo de Raadt, July 10, 2014, OpenBSD 5.6
        !           241:     <li><a href="https://man.openbsd.org/timingsafe_memcmp.3">timingsafe_memcmp(3)</a>:
        !           242:        Matthew Dempsky, July 13, 2014, OpenBSD 5.6
        !           243:     <li><a href="https://man.openbsd.org/pledge.2">pledge(2)</a>:
        !           244:        Theo de Raadt, July 19, 2015, OpenBSD 5.9
        !           245:     <li><a href="https://man.openbsd.org/getpwnam_shadow.3">getpwnam_shadow(3)</a>,
        !           246:        <a href="https://man.openbsd.org/getpwuid_shadow.3">getpwuid_shadow(3)</a>:
        !           247:        Ted Unangst and Theo de Raadt, November 18, 2015, OpenBSD 5.9
        !           248:     <li><a href="https://man.openbsd.org/recallocarray.3">recallocarray(3)</a>:
        !           249:        Otto Moerbeek, Joel Sing and Theo de Raadt, March 6, 2017, OpenBSD 6.1
        !           250:     <li><a href="https://man.openbsd.org/freezero.3">freezero(3)</a>:
        !           251:        Otto Moerbeek, April 10, 2017, OpenBSD 6.2
        !           252:     <li><a href="https://man.openbsd.org/unveil.2">unveil(2)</a>:
        !           253:        Theo de Raadt and Bob Beck, July 13, 2018, OpenBSD 6.4
        !           254:     <li><a href="https://man.openbsd.org/malloc_conceal.3">malloc_conceal(3)</a>
1.76      otto      255:        and
1.78    ! deraadt   256:        <a href="https://man.openbsd.org/calloc_conceal.3">calloc_conceal(3)</a>:
        !           257:        Otto Moerbeek, May 10, 2019, OpenBSD 6.5
1.16      deraadt   258: </ul>
                    259:
1.59      job       260:
                    261: <h3>Programs and subsystems</h3>
1.16      deraadt   262:
                    263: <ul>
1.78    ! deraadt   264:     <li><a href="https://man.openbsd.org/ypbind.8">ypbind(8)</a>,
        !           265:        <a href="https://man.openbsd.org/ypset.8">ypset(8)</a>,
        !           266:        <a href="https://man.openbsd.org/ypcat.1">ypcat(1)</a>,
        !           267:        <a href="https://man.openbsd.org/ypmatch.1">ypmatch(1)</a>,
        !           268:        <a href="https://man.openbsd.org/ypwhich.1">ypwhich(1)</a>,
        !           269:        and libc support: Started by Theo de Raadt.
        !           270:        Imported April 26, 1993 and first released with NetBSD 0.9.
        !           271:     <li><a href="https://man.openbsd.org/ypserv.8">ypserv(8)</a>:
        !           272:        Started by Mats O. Jansson in 1994.
        !           273:        Imported October 23, 1995 and first released with OpenBSD 2.0.
        !           274:     <li><a href="https://man.openbsd.org/mopd.8">mopd(8)</a>:
        !           275:        Started by Mats O. Jansson in 1993.
        !           276:        Imported September 21, 1996 and first released with OpenBSD 2.0.
        !           277:     <li><a href="anoncvs.html">AnonCVS</a>:
        !           278:        Designed and implemented by Chuck Cranor and Theo de Raadt in 1995
        !           279:        (<a href="papers/anoncvs-paper.pdf">paper</a>,
        !           280:        <a href="papers/anoncvs-slides.pdf">slides</a>)
        !           281:     <li><a href="https://man.openbsd.org/aucat.1">aucat(1)</a>:
        !           282:        Started by Kenneth Stailey.
        !           283:        Imported January 2, 1997 and first released with OpenBSD 2.1.
        !           284:        Now maintained by Alexandre Ratchov.
        !           285:     <li><a href="https://www.openssh.com/">OpenSSH</a>
        !           286:        including <a href="https://man.openbsd.org/ssh.1">ssh(1)</a>,
        !           287:        <a href="https://man.openbsd.org/scp.1">scp(1)</a>,
        !           288:        <a href="https://man.openbsd.org/sftp.1">sftp(1)</a>,
        !           289:        <a href="https://man.openbsd.org/ssh-add.1">ssh-add(1)</a>,
        !           290:        <a href="https://man.openbsd.org/ssh-agent.1">ssh-agent(1)</a>,
        !           291:        <a href="https://man.openbsd.org/ssh-keygen.1">ssh-keygen(1)</a>,
        !           292:        <a href="https://man.openbsd.org/sshd.8">sshd(8)</a>,
        !           293:        <a href="https://man.openbsd.org/sftp-server.8">sftp-server(8)</a>:
        !           294:        Started by Aaron Campbell, Bob Beck, Dug Song, Markus Friedl,
        !           295:        Niels Provos, and Theo de Raadt
        !           296:        as a fork of SSH 1.2.12 by Tatu Ylonen.
        !           297:        Imported September 26, 1999 and first released with OpenBSD 2.6.
        !           298:        Now maintained by Markus Friedl, Damien Miller, Darren Tucker, and
        !           299:        Theo de Raadt.
        !           300:     <li><a href="https://man.openbsd.org/mg.1">mg(1)</a>:
        !           301:        Started by Dave Conroy in November 1986.
        !           302:        Imported February 25, 2000 and first released with OpenBSD 2.7.
        !           303:        Now maintained by Mark Lumsden.
        !           304:     <li><a href="https://man.openbsd.org/m4.1">m4(1)</a>:
        !           305:        Originally implemented by Ozan Yigit and Richard A. O'Keefe for 4.3BSD-Reno.
        !           306:        Considerably extended and maintained by Marc Espie since 1999.
        !           307:     <li><a href="https://man.openbsd.org/pf.4">pf(4)</a>,
        !           308:        <a href="https://man.openbsd.org/pfctl.8">pfctl(8)</a>,
        !           309:        <a href="https://man.openbsd.org/pflogd.8">pflogd(8)</a>,
        !           310:        <a href="https://man.openbsd.org/authpf.8">authpf(8)</a>,
        !           311:        <a href="https://man.openbsd.org/ftp-proxy.8">ftp-proxy(8)</a>:
        !           312:        Started by Daniel Hartmeier as a replacement for the non-free ipf by
        !           313:        Darren Reed. Imported June 24, 2001 and first released with OpenBSD
        !           314:        3.0. Now maintained by Henning Brauer.
        !           315:     <li><a href="https://man.openbsd.org/OpenBSD-5.9/systrace.4">systrace(4)</a>,
        !           316:        <a href="https://man.openbsd.org/OpenBSD-5.9/systrace.1">systrace(1)</a>:
        !           317:        Started by Niels Provos.
        !           318:        Imported June 4, 2002 and first released with OpenBSD 3.2.
        !           319:        Deleted after OpenBSD 5.9 because
        !           320:        <a href="https://man.openbsd.org/pledge.2">pledge(2)</a> is even better.
        !           321:     <li><a href="https://man.openbsd.org/spamd.8">spamd(8)</a>:
        !           322:        Written by Bob Beck. Imported December 21, 2002 and first released with
        !           323:        OpenBSD 3.3.
        !           324:     <li><a href="https://man.openbsd.org/dc.1">dc(1)</a>:
        !           325:        Written and maintained by Otto Moerbeek.
        !           326:        Imported September 19, 2003 and first released with OpenBSD 3.5.
        !           327:     <li><a href="https://man.openbsd.org/bc.1">bc(1)</a>:
        !           328:        Written and maintained by Otto Moerbeek.
        !           329:        Imported September 25, 2003 and first released with OpenBSD 3.5.
        !           330:     <li><a href="https://man.openbsd.org/sensorsd.8">sensorsd(8)</a>:
        !           331:        Started by Henning Brauer.
        !           332:        Imported September 24, 2003 and first released with OpenBSD 3.5.
        !           333:        Reworked by Constantine A. Murenin.
        !           334:     <li><a href="https://man.openbsd.org/pkg_add.1">pkg_add(1)</a>:
        !           335:        Written and maintained by Marc Espie.
        !           336:        Imported October 16, 2003 and first released with OpenBSD 3.5.
        !           337:     <li><a href="https://man.openbsd.org/carp.4">carp(4)</a>:
        !           338:        Written by Mickey Shalayeff, Markus Friedl, Marco Pfatschbacher,
        !           339:        and Ryan McBride.
        !           340:        Imported October 17, 2003 and first released with OpenBSD 3.5.
        !           341:     <li><a href="http://www.openbgpd.org/">OpenBGPD</a>
        !           342:        including <a href="https://man.openbsd.org/bgpd.8">bgpd(8)</a>
        !           343:        and <a href="https://man.openbsd.org/bgpctl.8">bgpctl(8)</a>:
        !           344:        Written and maintained by Henning Brauer and Claudio Jeker,
        !           345:        and also maintained by Peter Hessler.
        !           346:        Imported December 17, 2003 and first released with OpenBSD 3.5.
        !           347:     <li><a href="https://man.openbsd.org/dhclient.8">dhclient(8)</a>:
        !           348:        Started by Ted Lemon and Elliot Poger in 1996.
        !           349:        Imported January 18, 2004 and first released with OpenBSD 3.5.
        !           350:        Reworked by Henning Brauer.
        !           351:        Now maintained by Kenneth Westerback.
        !           352:     <li><a href="https://man.openbsd.org/dhcpd.8">dhcpd(8)</a>:
        !           353:        Started by Ted Lemon in 1995.
        !           354:        Imported April 13, 2004 and first released with OpenBSD 3.6.
        !           355:        Reworked by Henning Brauer.
        !           356:        Now maintained by Kenneth Westerback.
        !           357:     <li><a href="https://man.openbsd.org/hotplugd.8">hotplugd(8)</a>:
        !           358:        Started by Alexander Yurchenko.
        !           359:        Imported May 30, 2004 and first released with OpenBSD 3.6.
        !           360:     <li><a href="http://www.openntpd.org/">OpenNTPD</a>
        !           361:        including <a href="https://man.openbsd.org/ntpd.8">ntpd(8)</a>
        !           362:        and <a href="https://man.openbsd.org/ntpctl.8">ntpctl(8)</a>:
        !           363:        Written and maintained by Henning Brauer.
        !           364:        Imported May 31, 2004 and first released with OpenBSD 3.6.
        !           365:        Portable version maintained by Brent Cook.
        !           366:     <li><a href="https://man.openbsd.org/dpb.1">dpb(1)</a>:
        !           367:        Started by Nikolay Sturm on August 10, 2004; first available for OpenBSD 3.6.
        !           368:        Rewritten and maintained by Marc Espie since August 20, 2010.
        !           369:     <li><a href="https://man.openbsd.org/ospfd.8">ospfd(8)</a>,
        !           370:        <a href="https://man.openbsd.org/ospfctl.8">ospfctl(8)</a>:
        !           371:        Started by Esben Norby and Claudio Jeker.
        !           372:        Imported January 28, 2005 and first released with OpenBSD 3.7.
        !           373:     <li><a href="https://man.openbsd.org/ifstated.8">ifstated(8)</a>:
        !           374:        Started by Marco Pfatschbacher and Ryan McBride.
        !           375:        Imported January 23, 2004 and first released with OpenBSD 3.8.
        !           376:     <li><a href="https://man.openbsd.org/bioctl.8">bioctl(8)</a>:
        !           377:        Started by Marco Peereboom.
        !           378:        Imported March 29, 2005 and first released with OpenBSD 3.8.
        !           379:     <li><a href="https://man.openbsd.org/hostapd.8">hostapd(8)</a>:
        !           380:        Written and maintained by Reyk Floeter.
        !           381:        Imported May 26, 2005 and first released with OpenBSD 3.8.
        !           382:     <li><a href="https://man.openbsd.org/watchdogd.8">watchdogd(8)</a>:
        !           383:        Started by Marc Balmer.
        !           384:        Imported August 8, 2005 and first released with OpenBSD 3.8.
        !           385:     <li><a href="https://man.openbsd.org/sdiff.1">sdiff(1)</a>:
        !           386:        Written by Ray Lai.
        !           387:        Imported December 27, 2005 and first released with OpenBSD 3.9.
        !           388:     <li><a href="https://man.openbsd.org/dvmrpd.8">dvmrpd(8)</a>,
        !           389:        <a href="https://man.openbsd.org/dvmrpctl.8">dvmrpctl(8)</a>:
        !           390:        Started by Esben Norby.
        !           391:        Imported June 1, 2006 and first released with OpenBSD 4.0.
        !           392:     <li><a href="https://man.openbsd.org/ripd.8">ripd(8)</a>,
        !           393:        <a href="https://man.openbsd.org/ripctl.8">ripctl(8)</a>:
        !           394:        Started by Michele Marchetto.
        !           395:        Imported October 18, 2006 and first released with OpenBSD 4.1.
        !           396:     <li><a href="https://man.openbsd.org/pkg-config.1">pkg-config(1)</a>:
        !           397:        Started by Chris Kuethe and Marc Espie.
        !           398:        Imported November 27, 2006 and first released with OpenBSD 4.1.
        !           399:        Now maintained by Jasper Lievisse Adriaanse.
        !           400:     <li><a href="https://man.openbsd.org/relayd.8">relayd(8)</a>
        !           401:        with <a href="https://man.openbsd.org/relayctl.8">relayctl(8)</a>:
        !           402:        Started by Pierre-Yves Ritschard and Reyk Floeter.
        !           403:        Imported December 16, 2006 and first released with OpenBSD 4.1.
        !           404:        Now maintained by Reyk Floeter and Sebastian Benoit.<br/>
        !           405:     <li><a href="https://man.openbsd.org/cwm.1">cwm(1)</a>:
        !           406:        Started by <a href="http://monkey.org/~marius/cwm/README">Marius
        !           407:            Aamodt Eriksen</A> in 2004.
        !           408:        Imported April 27, 2007 and first released with OpenBSD 4.2.
        !           409:        Now maintained by Okan Demirmen.
        !           410:        <a href="https://github.com/chneukirchen/cwm">Portable version</a>
        !           411:        maintained by Leah Neukirchen.
        !           412:     <li><a href="https://man.openbsd.org/ospf6d.8">ospf6d(8)</a>,
        !           413:        <a href="https://man.openbsd.org/ospf6ctl.8">ospf6ctl(8)</a>:
        !           414:        Started by Esben Norby and Claudio Jeker.
        !           415:        Imported October 8, 2007 and first released with OpenBSD 4.2.
        !           416:     <li><a href="https://man.openbsd.org/libtool.1">libtool(1)</a>:
        !           417:        Written by Steven Mestdagh and Marc Espie.
        !           418:        Imported October 28, 2007 and first available for OpenBSD 4.3.
        !           419:        Now maintained by Marc Espie, Jasper Lievisse Adriaanse,
        !           420:        and Antoine Jacoutot.
        !           421:     <li><a href="https://man.openbsd.org/snmpd.8">snmpd(8)</a>,
        !           422:        <a href="https://man.openbsd.org/snmpctl.8">snmpctl(8)</a>:
        !           423:        Started by Reyk Floeter.
        !           424:        Imported December 5, 2007 and first released with OpenBSD 4.3.
        !           425:        Maintained by Reyk Floeter and Bret Lambert.
        !           426:     <li><a href="https://man.openbsd.org/sysmerge.8">sysmerge(8)</a>:
        !           427:        Written and maintained by Antoine Jacoutot,
        !           428:        originally forked from mergemaster by Douglas Barton.
        !           429:        Imported April 22, 2008, first released with OpenBSD 4.4.
        !           430:     <li><a href="https://man.openbsd.org/ypldap.8">ypldap(8)</a>:
        !           431:        Started by Pierre-Yves Ritschard.
        !           432:        Imported June 26, 2008 and first released with OpenBSD 4.4.
        !           433:     <li><a href="https://www.opensmtpd.org/">OpenSMTPD</a>
        !           434:        including <a href="https://man.openbsd.org/smtpd.8">smtpd(8)</a>,
        !           435:        <a href="https://man.openbsd.org/smtpctl.8">smtpctl(8)</a>,
        !           436:        <a href="https://man.openbsd.org/makemap.8">makemap(8)</a>:
        !           437:        Started by Gilles Chehade.
        !           438:        Imported November 1, 2008 and first released with OpenBSD 4.6.
        !           439:        Now maintained by Gilles Chehade and Eric Faurot.
        !           440:     <li><a href="http://tmux.github.io/">tmux</a>,
        !           441:        <a href="https://man.openbsd.org/tmux.1">tmux(1)</a>:
        !           442:        Started in 2007 and maintained by Nicholas Marriott.
        !           443:        Imported June 1, 2009, first released with OpenBSD 4.6.
        !           444:     <li><a href="https://man.openbsd.org/ldpd.8">ldpd(8)</a>,
        !           445:        <a href="https://man.openbsd.org/ldpctl.8">ldpctl(8)</a>:
        !           446:        Started by Michele Marchetto.
        !           447:        Imported June 1, 2009 and first released with OpenBSD 4.6.
        !           448:        Now maintained by Claudio Jeker.
        !           449:     <li><a href="http://mdocml.bsd.lv/">mandoc</a>
        !           450:        including <a href="https://man.openbsd.org/mandoc.1">mandoc(1)</a>,
        !           451:        <a href="https://man.openbsd.org/man.1">man(1)</a>,
        !           452:        <a href="https://man.openbsd.org/apropos.1">apropos(1)</a>,
        !           453:        <a href="https://man.openbsd.org/makewhatis.8">makewhatis(8)</a>,
        !           454:        <a href="https://man.openbsd.org/man.cgi.8">man.cgi(8)</a>:
        !           455:        Started by Kristaps Dzonsons in November 2008.
        !           456:        Imported April 6, 2009, first released with OpenBSD 4.8.
        !           457:        Now maintained by Ingo Schwarze.
        !           458:     <li><a href="https://man.openbsd.org/ldapd.8">ldapd(8)</a>,
        !           459:        <a href="https://man.openbsd.org/ldapctl.8">ldapctl(8)</a>:
        !           460:        Written by Martin Hedenfalk.
        !           461:        Imported May 31, 2010 and first released with OpenBSD 4.8.
        !           462:     <li><a href="http://www.openiked.org/">OpenIKED</a>
        !           463:        including <a href="https://man.openbsd.org/iked.8">iked(8)</a>
        !           464:        and <a href="https://man.openbsd.org/ikectl.8">ikectl(8)</a>:
        !           465:        Started by Reyk Floeter.
        !           466:        Imported June 3, 2010 and first released with OpenBSD 4.8.
        !           467:        Now maintained by Reyk Floeter and Mike Belopuhov.
        !           468:     <li><a href="https://man.openbsd.org/iscsid.8">iscsid(8)</a>,
        !           469:        <a href="https://man.openbsd.org/iscsictl.8">iscsictl(8)</a>:
        !           470:        Written and maintained by Claudio Jeker.
        !           471:        Imported September 24, 2010 and first released with OpenBSD 4.9.
        !           472:     <li><a href="https://man.openbsd.org/rc.d.8">rc.d(8)</a>,
        !           473:        <a href="https://man.openbsd.org/rc.subr.8">rc.subr(8)</a>:
        !           474:        Written and maintained by Robert Nagy and Antoine Jacoutot.
        !           475:        Imported October 26, 2010 and first released with OpenBSD 4.9.
        !           476:     <li><a href="https://man.openbsd.org/tftpd.8">tftpd(8)</a>:
        !           477:        Written and maintained by David Gwynne.
        !           478:        Imported March 2, 2012 and first released with OpenBSD 5.2.
        !           479:     <li><a href="https://man.openbsd.org/npppd.8">npppd(8)</a>,
        !           480:        <a href="https://man.openbsd.org/npppctl.8">npppctl(8)</a>:
        !           481:        Started by Internet Initiative Japan Inc.
        !           482:        Imported January 11, 2010, first released with OpenBSD 5.3.
        !           483:        Maintained by YASUOKA Masahiko.
        !           484:     <li><a href="https://man.openbsd.org/ldomd.8">ldomd(8)</a>,
        !           485:        <a href="https://man.openbsd.org/ldomctl.8">ldomctl(8)</a>:
        !           486:        Written and maintained by Mark Kettenis.
        !           487:        Imported October 26, 2012 and first released with OpenBSD 5.3.
        !           488:     <li><a href="https://man.openbsd.org/sndiod.8">sndiod(8)</a>:
        !           489:        Written and maintained by Alexandre Ratchov.
        !           490:        Imported November 23, 2012 and first released with OpenBSD 5.3.
        !           491:     <li><a href="https://man.openbsd.org/cu.1">cu(1)</a>:
        !           492:        Written and maintained by Nicholas Marriott.
        !           493:        Imported July 10, 2012 and first released with OpenBSD 5.4.
        !           494:     <li><a href="https://man.openbsd.org/identd.8">identd(8)</a>:
        !           495:        Written and maintained by David Gwynne.
        !           496:        Imported March 18, 2013 and first released with OpenBSD 5.4.
        !           497:     <li><a href="https://man.openbsd.org/slowcgi.8">slowcgi(8)</a>:
        !           498:        Written and maintained by Florian Obser.
        !           499:        Imported May 23, 2013 and first released with OpenBSD 5.4.
        !           500:     <li><a href="https://man.openbsd.org/signify.1">signify(1)</a>:
        !           501:        Written and maintained by <a href="http://www.tedunangst.com/flak/post/signify">Ted Unangst</a>.
        !           502:        Imported December 31, 2013 and first released with OpenBSD 5.5.
        !           503:     <li><a href="https://man.openbsd.org/htpasswd.1">htpasswd(1)</a>:
        !           504:        Written and maintained by Florian Obser.
        !           505:        Imported March 17, 2014 and first released with OpenBSD 5.6.
        !           506:     <li><a href="https://www.libressl.org/">LibreSSL</a>:
        !           507:        Started by Ted Unangst, Bob Beck, Joel Sing, Miod Vallat, Philip Guenther,
        !           508:        and Theo de Raadt on April 13, 2014, as a fork of OpenSSL 1.0.1g.
        !           509:        First released with OpenBSD 5.6.
        !           510:        Portable version maintained by Brent Cook.
        !           511:     <li><a href="https://man.openbsd.org/httpd.8">httpd(8)</a>:
        !           512:        Started by Reyk Floeter.
        !           513:        Imported July 12, 2014 and first released with OpenBSD 5.6.
        !           514:        Maintained by Reyk Floeter and Florian Obser.
        !           515:     <li><a href="https://man.openbsd.org/rcctl.8">rcctl(8)</a>:
        !           516:        Written and maintained by Antoine Jacoutot.
        !           517:        Imported August 19, 2014 and first released with OpenBSD 5.7.
        !           518:     <li><a href="https://man.openbsd.org/file.1">file(1)</a>:
        !           519:        Rewritten from scratch and maintained by Nicholas Marriott.
        !           520:        Imported April 24, 2015 and first released with OpenBSD 5.8.
        !           521:     <li><a href="https://man.openbsd.org/doas.1">doas(1)</a>:
        !           522:        Written and maintained by Ted Unangst.
        !           523:        Imported July 16, 2015 and first released with OpenBSD 5.8.
        !           524:     <li><a href="https://man.openbsd.org/radiusd.8">radiusd(8)</a>:
        !           525:        Written and maintained by YASUOKA Masahiko.
        !           526:        Imported July 21, 2015 and first released with OpenBSD 5.8.
        !           527:     <li><a href="https://man.openbsd.org/eigrpd.8">eigrpd(8)</a>,
        !           528:        <a href="https://man.openbsd.org/eigrpctl.8">eigrpctl(8)</a>:
        !           529:        Written and maintained by Renato Westphal.
        !           530:        Imported October 2, 2015 and first released with OpenBSD 5.9.
        !           531:     <li><a href="https://man.openbsd.org/rebound.8">rebound(8)</a>:
        !           532:        Written and maintained by Ted Unangst.
        !           533:        Imported October 15, 2015 and first released with OpenBSD 5.9.
        !           534:     <li><a href="https://man.openbsd.org/vmm.4">vmm(4)</a>,
        !           535:        <a href="https://man.openbsd.org/vmd.8">vmd(8)</a>,
        !           536:        <a href="https://man.openbsd.org/vmctl.8">vmctl(8)</a>:
        !           537:        Written and maintained by Mike Larkin and Reyk Floeter.
        !           538:        Imported November 13, 2015 and first released with OpenBSD 5.9.
        !           539:     <li><a href="https://man.openbsd.org/pdisk.8">pdisk(8)</a>:
        !           540:        Originally written by Eryk Vershen in 1996-1998,
        !           541:        rewritten and maintained by Kenneth Westerback since January 11, 2016
        !           542:        and first released with OpenBSD 5.9.
        !           543:     <li><a href="https://man.openbsd.org/mknod.8">mknod(8)</a>:
        !           544:        Original version from Version 6 AT&amp;T UNIX (1975),
        !           545:        last rewritten by Marc Espie on March 5, 2016
        !           546:        and first released with OpenBSD 6.0.
        !           547:     <li><a href="https://man.openbsd.org/audioctl.1">audioctl(1)</a>:
        !           548:        Originally written by Lennart Augustsson in 1997,
        !           549:        rewritten and maintained by Alexandre Ratchov since June 21, 2016
        !           550:        and first released with OpenBSD 6.0.
        !           551:     <li><a href="https://man.openbsd.org/switchd.8">switchd(8)</a>,
        !           552:        <a href="https://man.openbsd.org/switchctl.8">switchctl(8)</a>:
        !           553:        Written and maintained by Reyk Floeter.
        !           554:        Imported July 19, 2016; released with OpenBSD 6.1.
        !           555:     <li><a href="https://man.openbsd.org/acme-client.1">acme-client(1)</a>:
        !           556:        Written by Kristaps Dzonsons, imported August 31, 2016; released
        !           557:        with OpenBSD 6.1.
        !           558:     <li><a href="https://man.openbsd.org/syspatch.8">syspatch(8)</a>:
        !           559:        Written and maintained by Antoine Jacoutot.
        !           560:        Imported September 5, 2016; released with OpenBSD 6.1.
        !           561:     <li><a href="https://man.openbsd.org/ping.8">ping(8)</a>:
        !           562:        Restructured to include IPv6 functionality and maintained by Florian Obser.
        !           563:        The separate
        !           564:        <a href="https://man.openbsd.org/OpenBSD-6.0/ping6.8">ping6(8)</a>
        !           565:        was superseded on September 17, 2016,
        !           566:        and the new, combined version was released with OpenBSD 6.1.
        !           567:     <li><a href="https://man.openbsd.org/xenodm.1">xenodm(1)</a>:
        !           568:        Cleaned-up fork of
        !           569:        <a href="https://man.openbsd.org/OpenBSD-6.0/xdm.1">xdm(1)</a>
        !           570:        maintained by Matthieu Herrb.
        !           571:        Imported October 23, 2016; released with OpenBSD 6.1.
        !           572:     <li><a href="https://man.openbsd.org/ocspcheck.8">ocspcheck(8)</a>:
        !           573:        Written and maintained by Bob Beck.
        !           574:        Imported January 24, 2017; released with OpenBSD 6.1.
        !           575:     <li><a href="https://man.openbsd.org/slaacd.8">slaacd(8)</a>:
        !           576:        Written and maintained by Florian Obser.
        !           577:        Imported March 18, 2017; released with OpenBSD 6.2.
        !           578:     <li><a href="https://man.openbsd.org/rad.8">rad(8)</a>:
        !           579:        Written and maintained by Florian Obser.
        !           580:        Imported July 10, 2018; released with OpenBSD 6.4.
        !           581:     <li><a href="https://man.openbsd.org/unwind.8">unwind(8)</a>:
        !           582:        Written and maintained by Florian Obser.
        !           583:        Imported January 23, 2019; released with OpenBSD 6.5.
        !           584:     <li><a href="https://man.openbsd.org/openrsync.1">openrsync(1)</a>:
        !           585:        Written by Kristaps Dzonsons.
        !           586:        Imported February 10, 2019; released with OpenBSD 6.5.
1.1       schwarze  587: </ul>
                    588:
1.11      deraadt   589: <h3>Projects maintained by OpenBSD developers outside OpenBSD</h3>
1.1       schwarze  590:
                    591: <ul>
1.78    ! deraadt   592:     <li><a href="http://www.sudo.ws/">sudo</a>:
        !           593:        Started by Bob Coggeshall and Cliff Spencer around 1980.
        !           594:        Imported November 18, 1999, first released with OpenBSD 2.7.
        !           595:        Now maintained by Todd Miller.
        !           596:     <li><a href="http://bulabula.org/femail/">femail</a>:
        !           597:        Written and maintained by Henning Brauer.
        !           598:        Started in 2005, port available since September 22, 2005.
        !           599:     <li><a href="http://www.midish.org/">midish</a>:
        !           600:        Written and maintained by Alexandre Ratchov.
        !           601:        Started in 2003, port available since November 4, 2005.
        !           602:     <li><a href="https://github.com/nicm/fdm">fdm</a>:
        !           603:        Written and maintained by Nicholas Marriott.
        !           604:        Started in 2006, port available since January 18, 2007.
        !           605:     <li><a href="https://github.com/ajacoutot/toad/">toad</a>:
        !           606:        Written and maintained by Antoine Jacoutot.
        !           607:        Started in 2013, port available since October 8, 2013.
        !           608:     <li><a href="https://mandoc.bsd.lv/docbook2mdoc/">docbook2mdoc</a>:
        !           609:        Started by Kristaps Dzonsons in 2014, maintained by Ingo Schwarze.
        !           610:        Port available since April 3, 2014.
        !           611:     <li><a href="http://jasperla.github.io/portroach/">portroach</a>:
        !           612:        Written and maintained by Jasper Lievisse Adriaanse,
        !           613:        originally forked from FreeBSD's portscout.
        !           614:        Started in 2014, port available since September 5, 2014.
        !           615:     <li><a href="https://github.com/yasuoka/cvs2gitdump">cvs2gitdump</a>:
        !           616:        Written and maintained by YASUOKA Masahiko.
        !           617:        Started in 2012, port available since August 1, 2016.
1.1       schwarze  618: </ul>