<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Mike Hicks on</title><link>https://mhicks.me/</link><description>Recent content in Mike Hicks on</description><generator>Hugo</generator><language>en</language><lastBuildDate>Thu, 12 Mar 2026 10:46:36 -0400</lastBuildDate><atom:link href="https://mhicks.me/index.xml" rel="self" type="application/rss+xml"/><item><title>Automatically Synthesizing Structured Input Generators</title><link>https://mhicks.me/research/synthesizing-generators/</link><pubDate>Thu, 29 Jan 2026 16:20:06 -0500</pubDate><guid>https://mhicks.me/research/synthesizing-generators/</guid><description>&lt;h2 id="overview">Overview
 &lt;a href="#overview">&lt;svg class="anchor-symbol" aria-hidden="true" height="26" width="26" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg">
 &lt;path d="M0 0h24v24H0z" fill="currentColor">&lt;/path>
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76.0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71.0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71.0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76.0 5-2.24 5-5s-2.24-5-5-5z">&lt;/path>
 &lt;/svg>&lt;/a>
&lt;/h2>
&lt;p>The goal of this project is to build PL/formal methods-based technology, in combination with GenAI, that can automate the synthesis of test input generators. Such generators are useful 
&lt;a href="https://mhicks.me/research/fuzz-testing/">property-based testing&lt;/a>, model-based testing, 
&lt;a href="https://mhicks.me/papers/disselkoen24vgd.html">differential testing&lt;/a>, 
&lt;a href="https://mhicks.me/research/fuzz-testing/">fuzz testing&lt;/a>, and other automated testing setups. Generators for complex inputs formats, such as those used for testing compilers, are quite labor intensive to write by hand, and they are easy to get wrong. Our goal is to bring proof-based technology in the 
&lt;a href="https://lean-lang.org/" target="_blank" rel="noopener">Lean programming language&lt;/a> together with the power of GenAI to produce efficient, effective, and proved correct generators.&lt;/p></description></item><item><title>Publications</title><link>https://mhicks.me/research/publications/</link><pubDate>Wed, 01 Oct 2025 00:00:00 +0000</pubDate><guid>https://mhicks.me/research/publications/</guid><description>&lt;meta http-equiv="refresh" content="0; url=https://mhicks.me/papers/mwh.html">
&lt;p>Redirecting to 
&lt;a href="https://mhicks.me/papers/mwh.html">publications page&lt;/a>&amp;hellip;&lt;/p></description></item><item><title>Fuzz Testing &amp; Property-Based Testing</title><link>https://mhicks.me/research/fuzz-testing/</link><pubDate>Fri, 02 Jan 2026 10:01:26 -0500</pubDate><guid>https://mhicks.me/research/fuzz-testing/</guid><description>&lt;h2 id="overview">Overview
 &lt;a href="#overview">&lt;svg class="anchor-symbol" aria-hidden="true" height="26" width="26" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg">
 &lt;path d="M0 0h24v24H0z" fill="currentColor">&lt;/path>
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76.0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71.0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71.0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76.0 5-2.24 5-5s-2.24-5-5-5z">&lt;/path>
 &lt;/svg>&lt;/a>
&lt;/h2>
&lt;p>Fuzz testing (fuzzing) and property-based testing are powerful techniques for automatically finding bugs and security vulnerabilities in software. My research focuses on making these techniques more effective, easier to use, and applicable to a wider range of software systems. A key area of current interest is how GenAI-driven coding can improve, and be improved by, these testing techniques.&lt;/p></description></item><item><title>Measuring Cybersecurity</title><link>https://mhicks.me/research/measuring-cybersecurity/</link><pubDate>Fri, 02 Jan 2026 10:01:26 -0500</pubDate><guid>https://mhicks.me/research/measuring-cybersecurity/</guid><description>&lt;h2 id="overview">Overview
 &lt;a href="#overview">&lt;svg class="anchor-symbol" aria-hidden="true" height="26" width="26" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg">
 &lt;path d="M0 0h24v24H0z" fill="currentColor">&lt;/path>
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76.0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71.0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71.0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76.0 5-2.24 5-5s-2.24-5-5-5z">&lt;/path>
 &lt;/svg>&lt;/a>
&lt;/h2>
&lt;p>A fundamental challenge in cybersecurity is connecting innovations to their real-world impact. How do we know if a new security tool, technique, or policy actually makes people safer? How do we assess the effectiveness of secure development practices? My research aims to apply empirical measurements to better understand and improve cybersecurity outcomes.&lt;/p></description></item><item><title>Cedar &amp; Authorization</title><link>https://mhicks.me/research/cedar-authorization/</link><pubDate>Fri, 02 Jan 2026 10:01:26 -0500</pubDate><guid>https://mhicks.me/research/cedar-authorization/</guid><description>&lt;h2 id="overview">Overview
 &lt;a href="#overview">&lt;svg class="anchor-symbol" aria-hidden="true" height="26" width="26" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg">
 &lt;path d="M0 0h24v24H0z" fill="currentColor">&lt;/path>
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76.0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71.0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71.0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76.0 5-2.24 5-5s-2.24-5-5-5z">&lt;/path>
 &lt;/svg>&lt;/a>
&lt;/h2>
&lt;p>
&lt;a href="https://cedarpolicy.com" target="_blank" rel="noopener">&lt;strong>Cedar&lt;/strong>&lt;/a> is a domain-specific language for writing and enforcing authorization policies. You write Cedar policies to say who can do what in your application, which invokes the Cedar authorization engine to allow/deny each user request. Cedar is designed to be:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Expressive&lt;/strong>: Rich enough to encode complex authorization requirements&lt;/li>
&lt;li>&lt;strong>Fast&lt;/strong>: Efficient authorization decisions even at cloud scale&lt;/li>
&lt;li>&lt;strong>Safe&lt;/strong>: Type system prevents common policy errors&lt;/li>
&lt;li>&lt;strong>Analyzable&lt;/strong>: Automated reasoning can verify policy properties&lt;/li>
&lt;/ul>
&lt;p>Cedar demonstrates how programming language techniques — type systems, formal semantics, verification — can underpin practical, high-assurance security tools. I co-led Cedar&amp;rsquo;s development (with 
&lt;a href="https://emina.github.io/" target="_blank" rel="noopener">Emina Torlak&lt;/a>) during 2022-2024 while full-time at Amazon Web Services, and I&amp;rsquo;m still involved today as a Cedar user and maintainer.&lt;/p></description></item><item><title>Research Group</title><link>https://mhicks.me/research/research-group/</link><pubDate>Fri, 02 Jan 2026 10:01:26 -0500</pubDate><guid>https://mhicks.me/research/research-group/</guid><description>&lt;h2 id="hiring">Hiring
 &lt;a href="#hiring">&lt;svg class="anchor-symbol" aria-hidden="true" height="26" width="26" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg">
 &lt;path d="M0 0h24v24H0z" fill="currentColor">&lt;/path>
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76.0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71.0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71.0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76.0 5-2.24 5-5s-2.24-5-5-5z">&lt;/path>
 &lt;/svg>&lt;/a>
&lt;/h2>
&lt;p>I am currently looking for talented PhD students to work on projects in computer security and software quality! See my 
&lt;a href="https://mhicks.me/about/#research">research summary&lt;/a> for an overview, including in-flight projects, and my 
&lt;a href="https://mhicks.me/research/publications/">publications&lt;/a> for specific past work.&lt;/p>




&lt;h2 id="current-and-former-group">Current and former group
 &lt;a href="#current-and-former-group">&lt;svg class="anchor-symbol" aria-hidden="true" height="26" width="26" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg">
 &lt;path d="M0 0h24v24H0z" fill="currentColor">&lt;/path>
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76.0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71.0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71.0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76.0 5-2.24 5-5s-2.24-5-5-5z">&lt;/path>
 &lt;/svg>&lt;/a>
&lt;/h2>
&lt;p>Since I&amp;rsquo;ve been at Penn, I am pleased to be working with 
&lt;a href="https://www.linkedin.com/in/noopur-bhatt/" target="_blank" rel="noopener">Noopur Bhatt&lt;/a> (advised by 
&lt;a href="https://www.cis.upenn.edu/~sga001/" target="_blank" rel="noopener">Sebastian Angel&lt;/a>) and 
&lt;a href="https://thia.codes/" target="_blank" rel="noopener">Thia Richey&lt;/a> and 
&lt;a href="https://www.cis.upenn.edu/~jwc/" target="_blank" rel="noopener">Joe Cutler&lt;/a> (both advised by 
&lt;a href="https://www.cis.upenn.edu/~bcpierce/" target="_blank" rel="noopener">Benjamin Pierce&lt;/a>).&lt;/p></description></item><item><title>Talks</title><link>https://mhicks.me/talks/</link><pubDate>Fri, 21 Nov 2025 08:04:13 -0500</pubDate><guid>https://mhicks.me/talks/</guid><description/></item><item><title>Professional Activities</title><link>https://mhicks.me/research/professional-activities/</link><pubDate>Fri, 02 Jan 2026 10:01:26 -0500</pubDate><guid>https://mhicks.me/research/professional-activities/</guid><description>&lt;p>I was the Chair (2015-2018) and Past Chair (2018-2021) of &lt;a href="http://www.sigplan.org/">ACM SIGPLAN&lt;/a>; I was the Steering Committee Chair for &lt;a href="http://sigplan.org/Conferences/POPL/">POPL&lt;/a> (2018-2021); Founder and Editor of &lt;a href="https://blog.sigplan.org/">PL Perspectives, the SIGPLAN blog&lt;/a> (2019-2021); an Associate Editor for &lt;a href="http://toplas.acm.org/">TOPLAS&lt;/a> (2012-2016); and I have served (or am serving) on the following committees:&lt;/p>
&lt;table>
 &lt;tbody>&lt;tr>&lt;td valign="top" align="center">&lt;b>2026&lt;/b>&lt;/td>&lt;td valign="top">&lt;a href="https://conf.researchr.org/track/splash-2026/oopsla-2026">OOPSLA&lt;/a>, &lt;a href="https://sp2026.ieee-security.org/">S&amp;amp;P&lt;/a>&lt;/td>
 &lt;/tr>&lt;tr>&lt;td valign="top" align="center">&lt;b>2025&lt;/b>&lt;/td>&lt;td valign="top">&lt;a href="https://csf2025.ieee-security.org/">CSF&lt;/a>&lt;/td>
 &lt;/tr>&lt;tr>&lt;td valign="top" align="center">&lt;b>2024&lt;/b>&lt;/td>&lt;td valign="top">&lt;a href="https://popl24.sigplan.org/">POPL&lt;/a>&lt;/td>
 &lt;/tr>&lt;tr>&lt;th>2023&lt;/th>&lt;td valign="top">&lt;a href="https://pldi23.sigplan.org/">PLDI&lt;/a> (Area Chair), &lt;a href="https://dl.acm.org/journal/pacmpl">PACMPL&lt;/a> (Editor in Chief, until Nov 2028)&lt;/td>
 &lt;/tr>&lt;tr>&lt;td valign="top" align="center">&lt;b>2022&lt;/b>&lt;/td>&lt;td valign="top">&lt;a href="https://www.ieee-security.org/TC/SP2022/">S&amp;amp;P&lt;/a>&lt;/td>
 &lt;/tr>&lt;tr>&lt;th>2021&lt;/th>&lt;td valign="top">&lt;a href="https://conf.researchr.org/home/pldi-2021">PLDI&lt;/a>, &lt;a href="https://2021.splashcon.org/track/splash-2021-oopsla">OOPSLA&lt;/a>, &lt;a href="https://asplos-conference.org/2021">ASPLOS&lt;/a> (ERC)&lt;/td>
 &lt;/tr>&lt;tr>&lt;th>2020&lt;/th>&lt;td valign="top">&lt;a href="https://popl20.sigplan.org/home/planqc-2020">PLanQC&lt;/a> (co-organizer), &lt;a href="https://conf.researchr.org/home/pldi-2020">PLDI&lt;/a> (ERC)&lt;/td>
 &lt;/tr>&lt;tr>&lt;th>2019&lt;/th>&lt;td valign="top">&lt;a href="https://popl19.sigplan.org/track/POPL-2019-Student-Research-Competition">POPL SRC&lt;/a>, &lt;a href="https://asplos-conference.org/2019">ASPLOS&lt;/a> (ERC), &lt;a href="https://snapl.org/2019/">SNAPL&lt;/a>, &lt;a href="https://www.sigsac.org/ccs/CCS2019/">CCS&lt;/a> (Area Chair), &lt;a href="https://secdev.ieee.org/2019/Home/">SecDev&lt;/a>&lt;/td>
 &lt;/tr>&lt;tr>&lt;th>2018&lt;/th>&lt;td valign="top">&lt;a href="http://www.etaps.org/index.php/2018/post">POST&lt;/a>, &lt;a href="https://www.ieee-security.org/TC/SP2018/">S&amp;amp;P&lt;/a> (Area Chair), &lt;a href="https://secdev.ieee.org/2018/home">SecDev&lt;/a>&lt;/td>
 &lt;/tr>&lt;tr>&lt;td valign="top" align="center">&lt;b>2017&lt;/b>&lt;/td>&lt;td valign="top">&lt;a href="http://www.ieee-security.org/TC/SP2017/">S&amp;amp;P&lt;/a>, &lt;a href="https://distrinet.cs.kuleuven.be/events/essos/2017/">ESSoS&lt;/a>, &lt;a href="https://www.sigsac.org/ccs/CCS2017/">CCS&lt;/a>, &lt;a href="https://www.usenix.org/conference/ase17">USENIX ASE&lt;/a>, &lt;a href="https://secdev.ieee.org/2017/home/">SecDev&lt;/a>&lt;/td>
 &lt;/tr>&lt;tr>&lt;th>2016&lt;/th>&lt;td valign="top">&lt;a href="http://www.sigplan.org/Conferences/PLDI/">PLDI&lt;/a>, &lt;a href="http://csf2016.tecnico.ulisboa.pt/">CSF&lt;/a> (PC co-chair), &lt;a href="https://www.usenix.org/conference/ase16">USENIX ASE&lt;/a>, &lt;a href="http://secdev.ieee.org/">SecDev&lt;/a> (PC chair), &lt;a href="https://csaw.engineering.nyu.edu/research/preliminary-judges">CSAW&lt;/a> (judge)&lt;/td>
 &lt;/tr>&lt;tr>&lt;th>2015&lt;/th>&lt;td valign="top">&lt;a href="http://www.ieee-security.org/TC/SP2015/">S&amp;amp;P&lt;/a>, &lt;a href="http://csf2015.di.univr.it/">CSF&lt;/a> (PC co-chair), &lt;a href="http://snapl.org/2015/index.html">SNAPL&lt;/a>&lt;/td>
 &lt;/tr>&lt;tr>&lt;td valign="top" align="center">&lt;b>2014&lt;/b>&lt;/td>&lt;td valign="top">&lt;a href="http://popl-obt-2014.cs.brown.edu/">OBT&lt;/a>, &lt;a href="http://csf2014.di.univr.it/">CSF&lt;/a>, &lt;a href="http://splashcon.org/2014/oopsla.html">OOPSLA/SPLASH&lt;/a>&lt;/td>
 &lt;/tr>&lt;tr>&lt;th>2013&lt;/th>&lt;td valign="top">&lt;a href="http://popl.mpi-sws.org/2013/">POPL&lt;/a> (ERC), &lt;a href="http://pldi2013.ucombinator.org/">PLDI&lt;/a>&lt;/td>
 &lt;/tr>&lt;tr>&lt;th>2012&lt;/th>&lt;td valign="top">&lt;a href="http://www.cse.psu.edu/popl/12/">POPL&lt;/a> (PC chair), &lt;a href="http://hotswup.org/2012/">HotSWUp&lt;/a>&lt;/td>
 &lt;/tr>&lt;tr>&lt;th>2011&lt;/th>&lt;td valign="top">&lt;a href="http://www.mpi-sws.org/~dreyer/tldi2011/">TLDI&lt;/a>, &lt;a href="http://www.hotswup.org/2011">HotSWUp&lt;/a> (co-organizer), &lt;a href="http://splashcon.org/2011/committee/75">OOPSLA&lt;/a>&lt;/td>
 &lt;/tr>&lt;tr>&lt;th>2010&lt;/th>&lt;td valign="top">&lt;a href="http://research.microsoft.com/en-us/um/people/adg/esop2010.htm">ESOP&lt;/a>, &lt;a href="http://cs.stanford.edu/pldi10/">PLDI&lt;/a> (ERC and tutorials chair), &lt;a href="http://www.icfpconference.org/">ICFP&lt;/a> (PC and local arrangements), &lt;a href="http://cseweb.ucsd.edu/paste2010/">PASTE&lt;/a>&lt;/td>
 &lt;/tr>&lt;tr>&lt;td valign="top" align="center">&lt;b>2009&lt;/b>&lt;/td>&lt;td valign="top">&lt;a href="http://www.cs.ucsd.edu/popl/09/">POPL&lt;/a>, &lt;a href="http://oakland09.cs.virginia.edu/">S&amp;amp;P&lt;/a>, &lt;a href="http://www-plan.cs.colorado.edu/~pldi09/src.html">PLDI SRC&lt;/a>&lt;/td>
 &lt;/tr>&lt;tr>&lt;th>2008&lt;/th>&lt;td valign="top">&lt;a href="http://www.sigsac.org/ccs/CCS2008/">CCS&lt;/a>, &lt;a href="http://www.ece.cmu.edu/~koopman/dsn08/catars08.html">CATARS&lt;/a>, &lt;a href="http://discotec08.ifi.uio.no/pmwiki.php?n=Coordination08.HomePage">COORDINATION&lt;/a>, &lt;a href="http://www.cs.kent.ac.uk/people/staff/rej/ismm2008/">ISMM&lt;/a> (ERC)&lt;/td>
 &lt;/tr>&lt;tr>&lt;th>2007&lt;/th>&lt;td valign="top">&lt;a href="http://www.cs.umd.edu/~mwh/PLAS07/">PLAS&lt;/a> (general and PC chair), &lt;a href="http://www.oopsla.org/oopsla2007/">OOPSLA&lt;/a>, &lt;a href="http://www.discotec07.cs.ucy.ac.cy/">COORDINATION&lt;/a>, &lt;a href="http://ties.ucsd.edu/PLDI/">PLDI&lt;/a>&lt;/td>
 &lt;/tr>&lt;tr>&lt;th>2006&lt;/th>&lt;td valign="top">&lt;a href="http://www.disi.unige.it/person/AnconaD/FTfJP06/">FTfJP&lt;/a>, &lt;a href="http://www.cis.upenn.edu/~stevez/plas06.html">PLAS&lt;/a>, &lt;a href="http://www.itu.dk/research/plt/space2006/">SPACE&lt;/a>, &lt;a href="http://oops.disi.unige.it/OOPS06/">OOPS&lt;/a> (part of SAC 2006) (part of &lt;a href="http://www.acm.org/conferences/sac/sac2006/">SAC 2006&lt;/a>)&lt;/td>
 &lt;/tr>&lt;tr>&lt;td valign="top" align="center">&lt;b>2005&lt;/b>&lt;/td>&lt;td valign="top">&lt;a href="http://research.microsoft.com/~tharris/scool05/">SCOOL&lt;/a>, &lt;a href="http://research.ihost.com/vee/vee05/index.html">VEE&lt;/a>&lt;/td>
 &lt;/tr>&lt;tr>&lt;td valign="top" align="center">&lt;b>2004&lt;/b>&lt;/td>&lt;td valign="top">&lt;a href="https://lists.ira.uni-karlsruhe.de/pipermail/mmb/2004/000260.html">IWAN&lt;/a>, &lt;a href="http://icpp.ecn.purdue.edu/ICPP2004/">ICPP&lt;/a>, &lt;a href="http://www.informatik.uni-bonn.de/~gk/use/fuse2004/index.html">FUSE&lt;/a>&lt;/td>
 &lt;/tr>&lt;tr>&lt;td valign="top" align="center">&lt;b>2003&lt;/b>&lt;/td>&lt;td valign="top">&lt;a href="http://www.informatik.uni-trier.de/~ley/db/conf/iwan/iwan2003.html">IWAN&lt;/a>, &lt;a href="http://www.informatik.uni-bonn.de/~gk/use/2003/">USE&lt;/a>&lt;/td>
 &lt;/tr>&lt;tr>&lt;td valign="top" align="center">&lt;b>2002&lt;/b>&lt;/td>&lt;td valign="top">&lt;a href="http://www.sigmod.org/dblp/db/conf/iwan/iwan2002.html">IWAN&lt;/a>, &lt;a href="http://www.informatik.uni-bonn.de/~gk/use/2002/">USE&lt;/a>&lt;/td>
 &lt;/tr>&lt;tr>&lt;td valign="top" align="center">&lt;b>2001&lt;/b>&lt;/td>&lt;td valign="top">&lt;a href="http://dblp2.uni-trier.de/db/conf/iwan/iwan2001">IWAN&lt;/a>&lt;/td>
 &lt;/tr>&lt;/tbody>
&lt;/table></description></item><item><title>Hello, World: A New Blog</title><link>https://mhicks.me/blog/hello-world/</link><pubDate>Thu, 12 Mar 2026 00:00:00 +0000</pubDate><guid>https://mhicks.me/blog/hello-world/</guid><description>&lt;p>Welcome to my blog. After years of inactivity on the blogging front, I feel I have the time and energy to start writing again. The 
&lt;a href="http://www.pl-enthusiast.net/" target="_blank" rel="noopener">PL Enthusiast&lt;/a> will remain where it is, and new thoughts will show up here.&lt;/p>




&lt;h2 id="what-to-expect">What to expect
 &lt;a href="#what-to-expect">&lt;svg class="anchor-symbol" aria-hidden="true" height="26" width="26" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg">
 &lt;path d="M0 0h24v24H0z" fill="currentColor">&lt;/path>
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76.0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71.0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71.0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76.0 5-2.24 5-5s-2.24-5-5-5z">&lt;/path>
 &lt;/svg>&lt;/a>
&lt;/h2>
&lt;p>I plan to write about topics I think about in my research and teaching.&lt;/p></description></item><item><title>Secure System Engineering and Management: A Data-Driven Approach</title><link>https://mhicks.me/courses/cis-7000-spring2026/</link><pubDate>Thu, 01 Jan 2026 00:00:00 +0000</pubDate><guid>https://mhicks.me/courses/cis-7000-spring2026/</guid><description>&lt;h2 id="about">About
 &lt;a href="#about">&lt;svg class="anchor-symbol" aria-hidden="true" height="26" width="26" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg">
 &lt;path d="M0 0h24v24H0z" fill="currentColor">&lt;/path>
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76.0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71.0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71.0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76.0 5-2.24 5-5s-2.24-5-5-5z">&lt;/path>
 &lt;/svg>&lt;/a>
&lt;/h2>
&lt;p>In this course, students learn techniques for building, deploying, and maintaining secure systems. As computer security is a constantly evolving field, the course places particular emphasis on means to empirically evaluate security technology, processes, and operational practices. As security is always in support of a primary activity and resources are limited, the course also places emphasis on strong communications, using evidence and empathy to explain and collaborate on security needs. Course activities include reading and discussing technical papers and other communications; carrying out five homework projects, on technical and non-technical topics; and taking a midterm and final exam.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/an11rubydust.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/an11rubydust.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Dynamic Inference of Static Types for Ruby&lt;/b>.
Jong hoon (David) An, Avik Chaudhuri, Jeffrey S. Foster, and Michael
Hicks.
In &lt;em>Proceedings of the ACM Conference on Principles of
Programming Languages (POPL)&lt;/em>, pages 459&amp;ndash;472, January 2011.&lt;/font>&lt;p>
There have been several efforts to bring static type
inference to object-oriented dynamic languages such as Ruby, Python,
and Perl. In our experience, however, such type inference systems
are extremely difficult to develop, because dynamic languages are
typically complex, poorly specified, and include
features, such as &lt;tt>eval&lt;/tt> and reflection, that are hard to
analyze. &lt;p>
In this paper, we introduce
&lt;em>constraint-based dynamic type inference&lt;/em>, a technique that
infers static types based on dynamic program executions. In our approach,
we wrap each run-time value to associate it with a type variable,
and the wrapper generates constraints on this type variable when
the wrapped value is used. This technique avoids many of the often
overly conservative approximations of static tools,
as constraints
are generated based on how values are used during actual program runs.
Using wrappers is also easy to implement, since we need only
write a constraint resolution algorithm and a transformation to
introduce the wrappers.
The best part is that we can eat our
cake, too: our algorithm will infer &lt;em>sound&lt;/em> types as long as it
observes every
path through each method body&amp;mdash;note that the number of such paths
may be dramatically smaller than the number of paths through the
program as a whole. &lt;p>
We have developed Rubydust, an implementation of
our algorithm for Ruby. Rubydust takes advantage of Ruby&amp;rsquo;s dynamic
features to implement wrappers as a language library. We applied
Rubydust to a number of small programs and found it to be both easy
to use and useful:
Rubydust discovered 1 real type error,
and all other inferred types were correct and
readable.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/AnagnostakisHIKS00.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/AnagnostakisHIKS00.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Scalable Resource Control in Active Networks&lt;/b>.
Kostas G. Anagnostakis, Michael W. Hicks, Sotiris Ioannidis,
Angelos D. Keromytis, and Jonathan M. Smith.
In Hiroshi Yashuda, editor, &lt;em>Proceedings of the Second
International Working Conference on Active Networks (IWAN)&lt;/em>, volume 1942 of
&lt;em>Lecture Notes in Computer Science&lt;/em>, pages 343&amp;ndash;358. Springer-Verlag,
October 2000.&lt;/font>&lt;p>
The increased complexity of the service model relative to store-and-forward
routers, has made resource management one of the paramount concerns in
active networking research and engineering. Previous work investigated
methods for controlling access to resources by restricting namespaces
or providing limited functionality in a domain-specific language.
Combinations of these methods and scheduling technologies have also been used
to demonstrate a resource-managed node architecture. In this paper, we address
Two major challenges in scaling resource management to many-node active
networks. The first is the use of market mechanisms and trading amongst nodes
and programs with varying degrees of competition and cooperation to provide a
scalable approach to managing active network resources. The second is the use
of a trust-management architecture to ensure that the participants in the
resource management marketplace have a policy-driven “rule of law”
in which marketplace decisions can be made and relied upon. We have used
lottery scheduling and the Keynote trust-management system for our
implementation, for which we provide some initial performance indications.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/antopoulous17blazer.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/antopoulous17blazer.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Decomposition Instead of Self-Composition for Proving the Absence of
Timing Channels&lt;/b>.
Timos Antonopoulos, Paul Gazzillo, Michael Hicks, Eric Koskinen,
Tachio Terauchi, and Shiyi Wei.
In &lt;em>Proceedings of the ACM Conference on Programming Language
Design and Implementation (PLDI)&lt;/em>, June 2017.&lt;/font>&lt;p>
We present a novel approach to proving the absence of timing channels.
The idea is to partition the program&amp;rsquo;s execution traces in such a way
that each partition component is checked for timing attack
resilience by a time complexity analysis and that per-component
resilience implies the resilience of the whole program. We construct
a partition by splitting the program traces at
secret-independent branches. This ensures that any pair of traces
with the same public input has a component containing both
traces. Crucially, the per-component checks can be normal &lt;em>safety
properties&lt;/em> expressed in terms of a single execution. Our approach is
thus in contrast to prior approaches, such as &lt;em>self-composition&lt;/em>,
that aim to reason about multiple (&lt;em>k&lt;/em>&amp;gt;=2) executions at once.&lt;p>
We formalize the above as an approach called &lt;em>quotient partitioning&lt;/em>,
generalized to any &lt;em>k&lt;/em>-safety property, and prove it to be sound. A
key feature of our approach is a demand-driven partitioning strategy
that uses a regex-like notion called &lt;em>trails&lt;/em> to identify sets of
execution traces, particularly those influenced by tainted (or secret)
data.
We have applied our technique in a prototype implementation
tool called &lt;em>Blazer&lt;/em>, based on WALA, PPL, and the brics
automaton library.
We have proved timing-channel freedom of (or synthesized an attack
specification for) 24 programs
written in Java bytecode, including 6 classic examples from the literature and 6
examples extracted from the DARPA STAC challenge problems.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/bhattacherjee21bullfrog.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/bhattacherjee21bullfrog.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>BullFrog: Online Schema Evolution via Lazy Evaluation&lt;/b>.
Souvik Bhattacherjee, Gang Liao, Michael Hicks, and Daniel J. Abadi.
In &lt;em>Proceedings of the ACM SIGMOD International Conference on
Management of Data (SIGMOD)&lt;/em>, June 2021.&lt;/font>&lt;p>
BullFrog is a relational DBMS that supports single-step schema migrations&amp;mdash;even those that are backwards incompatible&amp;mdash;without downtime, and without need for advanced warning. When a schema migration is submitted, BullFrog initiates a logical switch to the new schema, but physically migrates affected data lazily, as it is accessed by incoming transactions. BullFrog&amp;rsquo;s internal concurrency control algorithms and data structures enable concurrent processing of schema migration operations with post-migration transactions, while ensuring exactly-once migration of all old data into the physical layout required by the new schema. BullFrog is implemented as an open source extension to PostgreSQL. Experiments using this prototype over a TPC-C based workload (supplemented to include schema migrations) show that BullFrog can achieve zero-downtime migration to non-trivial new schemas with near-invisible impact on transaction throughput and latency.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/BiermanHSS03.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/BiermanHSS03.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Formalizing Dynamic Software Updating&lt;/b>.
Gavin Bierman, Michael Hicks, Peter Sewell, and Gareth Stoyle.
In &lt;em>On-line Proceedings of the Second International Workshop on
Unanticipated Software Evolution (USE)&lt;/em>, April 2003.&lt;/p>
&lt;p>&lt;a href="http://www.informatik.uni-bonn.de/~gk/use/2003/Papers/papers.html">
&lt;a href="http://www.informatik.uni-bonn.de/~gk/use/2003/Papers/papers.html" target="_blank" rel="noopener">http://www.informatik.uni-bonn.de/~gk/use/2003/Papers/papers.html&lt;/a>&lt;/a>.&lt;/font>&lt;p>
Dynamic software updating (DSU) enables running programs to be updated with
new code and data without interrupting their execution. A number of DSU
systems have been designed, but there is still little rigorous understanding
of how to use DSU technology so that updates are safe. As a first step in
this direction, we introduce a small &lt;em>update calculus&lt;/em> with a precise
mathematical semantics. The calculus is formulated as an extension of a
typed lambda calculus, and supports updating technology similar to
that of the programming language Erlang. Our goal
is to provide a simple yet expressive foundation for reasoning about
dynamically updateable software. In this paper, we present the details of
the calculus, give some examples of its expressive power, and discuss how
it might be used or extended to guarantee safety properties.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/BiermanHSSW03.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/BiermanHSSW03.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Dynamic Rebinding for Marshalling and Update with Destruct-time
λ&lt;/b>.
Gavin Bierman, Michael Hicks, Peter Sewell, Gareth Stoyle, and Keith
Wansbrough.
In &lt;em>Proceedings of the ACM International Conference on
Functional Programming (ICFP)&lt;/em>, pages 99&amp;ndash;110, August 2003.&lt;/font>&lt;p>
Most programming languages adopt static binding, but for distributed
programming an exclusive reliance on static binding is too
restrictive: dynamic binding is required in various guises. Typically
it is provided only by ad-hoc mechanisms that lack clean semantics.
In this paper we adopt a more foundational approach, showing how core
dynamic rebinding mechanisms can be added to a CBV λ-calculus.
To do so we first develop two refinements of the CBV reduction
strategy with delayed instantiation, the &lt;em>redex-time&lt;/em> and
&lt;em>destruct-time&lt;/em> semantics. Delayed instantiation ensures we
obtain the most recent version of a definition following a rebinding.
The destruct-time semantics gives the basis for a λ_marsh calculus
that supports dynamic rebinding, with primitives to package values and
&lt;em>marks&lt;/em> to control which identifiers are dynamically rebound when
they are unpackaged. We extend λ_marsh with concurrency and
communication, giving examples showing how wrappers for encapsulating
untrusted code can be expressed, and discuss the extent to which it
can be statically typed. Finally, we use the destruct-time semantics
also as a basis for a λ_update calculus with simple primitives to
provide type-safe, dynamic updating of code. We thereby put a variety
of real-world mechanisms on a common semantic foundation.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/coblenz23rust.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/coblenz23rust.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>A Multimodal Study of Challenges Using Rust&lt;/b>.
Michael Coblenz, April Porter, Varun Das, Teja Nallagorla, and
Michael Hicks.
In &lt;em>Proceedings of the Workshop on the Evaluation and Usability
of Programming Languages and Tools (PLATEAU)&lt;/em>, February 2023.&lt;/font>&lt;p>
Rust is a programming language that provides strong safety properties, but does so at a usability cost. We conducted an observational study of Rust learners and a thematic analysis of StackOverflow posts about Rust to identify opportunities for improvement in Rust’s usability. Key challenges that we observed included syntactic challenges posed by the &lt;tt>?&lt;/tt> operator, block-terminal statements, and automatic dereferencing; late delivery of error messages; and the opacity of Rust errors resulting in programmers being unable to identify whether their partial fixes represented progress. We describe a collection of opportunities for improvement that leverage the compiler and the IDE.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/corcoran07provenance.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/corcoran07provenance.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Combining Provenance and Security Policies in a Web-based Document
Management System&lt;/b>.
Brian Corcoran, Nikhil Swamy, and Michael Hicks.
In &lt;em>On-line Proceedings of the Workshop on Principles of
Provenance (PrOPr)&lt;/em>, November 2007.
&lt;a href="http://homepages.inf.ed.ac.uk/jcheney/propr/">
&lt;a href="http://homepages.inf.ed.ac.uk/jcheney/propr/" target="_blank" rel="noopener">http://homepages.inf.ed.ac.uk/jcheney/propr/&lt;/a>&lt;/a>.&lt;/font>&lt;p>
Provenance and security are intimately related. Cheney et
al. show that the dependencies underlying provenance
information also underly information flow security policies. Provenance
information can also play a role in history-based access control
policies. Many real applications have the need to
combine a variety of security policies with provenance tracking. For
instance, an online stock trading website might restrict access to certain
premium features it offers using an access control policy, while at the same
time using an information flow policy to ensure that a user&amp;rsquo;s sensitive
trading information is not leaked to other users. Similarly, the application
might need to track the provenance of transaction information to support an
annual financial audit while also using provenance to attest to the
reliability of stock analyses that it presents to its users.&lt;p>
We have been exploring the interaction between provenance and security
policies while developing a document management system we call the
&lt;em>Collaborative Planning Application&lt;/em> (CPA). The CPA is written in
SELinks, our language for supporting user-defined, label-based security
policies. SELinks is an extension of the Links
web-programming language with means to express label-based
security policies. Labels are associated with the data they protect by
using dependent types which, along with some syntactic restrictions, suffice
to ensure that user-defined policies enjoy &lt;em>complete mediation&lt;/em> and
cannot be circumvented. Our interest in provenance and
security policies is thus part of a broader exploration of how security
policies can be encoded, composed, and reasoned about within SELinks. In
this paper, we describe the architecture of the CPA and its approach to
label-based provenance and security policies
and we sketch directions for further exploration on the interaction between
the two.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/corcoran09selinks.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/corcoran09selinks.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Cross-tier, Label-based Security Enforcement for Web Applications&lt;/b>.
Brian J. Corcoran, Nikhil Swamy, and Michael Hicks.
In &lt;em>Proceedings of the ACM SIGMOD International Conference on
Management of Data (SIGMOD)&lt;/em>, pages 269&amp;ndash;282, June 2009.&lt;/font>&lt;p>
This paper presents SELinks, a programming language focused on
building secure multi-tier web applications. SELinks provides a
uniform programming model, in the style of LINQ and Ruby on Rails,
with language syntax for accessing objects residing either in the
database or at the server. Object-level security policies are
expressed as fully-customizable, first-class &lt;em>labels&lt;/em> which may
themselves be subject to security policies. Access to labeled data
is mediated via trusted, user-provided &lt;em>policy enforcement&lt;/em>
functions.&lt;p>
SELinks has two novel features that ensure security policies are
enforced correctly and efficiently. First, SELinks implements a
type system called Fable that allows a protected
object&amp;rsquo;s type to refer to its protecting label. The type
system can check that labeled data is never accessed directly by the
program without first consulting the appropriate policy
enforcement function. Second, SELinks compiles policy enforcement
code to database-resident user-defined functions that can be
called directly during query processing. Database-side checking
avoids transferring data to the server needlessly, while still
allowing policies to be expressed in a customizable and portable
manner.&lt;p>
Our experience with two sizable web applications, a model
health-care database and a secure wiki with fine-grained security
policies, indicates that cross-tier policy enforcement in SELinks
is flexible, relatively easy to use, and, when compared to a
single-tier approach, improves throughput by nearly an order of
magnitude. SELinks is freely available.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/CraryHW00.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/CraryHW00.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Safe and Flexible Dynamic Linking of Native Code&lt;/b>.
Michael Hicks, Stephanie Weirich, and Karl Crary.
In Robert Harper, editor, &lt;em>Proceedings of the ACM SIGPLAN
Workshop on Types in Compilation (TIC)&lt;/em>, volume 2071 of &lt;em>Lecture Notes in
Computer Science&lt;/em>. Springer-Verlag, September 2000.&lt;/font>&lt;p>
We present the design and implementation of the first complete framework
for flexible and safe dynamic linking of native code. Our approach
extends Typed Assembly Language with a primitive for loading and
typechecking code, which is flexible enough to support a variety of
linking strategies, but simple enough that it does not significantly
expand the trusted computing base. Using this primitive, along with the
ability to compute with types, we show that we can &lt;em>program&lt;/em> many
existing dynamic linking approaches. As a concrete demonstration, we have
used our framework to implement dynamic linking for a type-safe dialect of
C, closely modeled after the standard linking facility for Unix C
programs. Aside from the unavoidable cost of verification, our
implementation performs comparably with the standard, untyped approach.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/darais21symphony.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/darais21symphony.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Symphony: A Concise Language Model for MPC&lt;/b>.
Ian Sweet, David Darais, David Heath, Ryan Estes, William Harris, and
Michael Hicks.
In &lt;em>Informal Proceedings of the Workshop on Foundations on
Computer Secuirty (FCS)&lt;/em>, June 2021.&lt;/font>&lt;p>
Secure multi-party computation (MPC) allows mutually distrusting
parties to cooperatively compute, using a cryptographic protocol, a
function over their private data.
This short paper presents Symphony, an expressive yet concise domain-specific
language for expressing MPCs. Symphony starts with the standard,
simply-typed λ calculus extended with integers, sums,
products, recursive types, and references. It layers on two additional
elements: (1) A datatype representing &lt;em>secret shares&lt;/em>, which are
the basis of multiparty computation, and (2) a simple mechanism called
&lt;em>par blocks&lt;/em> to express which scopes are to be executed by which
parties, and which determine to whom various data values are visible
at any given time. The meaning of a Symphony program can be expressed
using a &lt;em>single-threaded semantics&lt;/em> even though in actuality the
program will be run by multiple communicating parties in parallel. Our
&lt;em>distributed semantics&lt;/em> is expressed naturally as piecewise,
single-threaded steps of &lt;em>slices&lt;/em> of the program among its
parties. We prove that these two semantic interpretations of a program
coincide, and we prove a standard type soundness result.
To demonstrate Symphony&amp;rsquo;s expressiveness, we have built an interpreter
for it (with some extensions) and used it to implement a number of
realistic MPC applications, including sorting, statistical and numeric
computations, and private information retrieval.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/deng23mqcc.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/deng23mqcc.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Automating NISQ Application Design with Meta Quantum Circuits with
Constraints (MQCC)&lt;/b>.
Haowei Deng, Yuxiang Peng, Michael Hicks, and Xiaodi Wu.
&lt;em>ACM Transactions on Quantum Computing (TQC)&lt;/em>, 4(3), April
2023.&lt;/font>&lt;p>
Near-term intermediate scale quantum (NISQ) computers are likely to have very restricted hardware resources, where precisely controllable qubits are expensive, error-prone, and scarce. Programmers of such computers must therefore balance trade-offs among a large number of (potentially heterogeneous) factors specific to the targeted application and quantum hardware. To assist them, we propose Meta Quantum Circuits with Constraints (MQCC), a meta-programming framework for quantum programs. Programmers express their application as a succinct collection of normal quantum circuits stitched together by a set of (manually or automatically) added meta-level choice variables, whose values are constrained according to a programmable set of quantitative optimization criteria. MQCC’s compiler generates the appropriate constraints and solves them via an SMT solver, producing an optimized, runnable program.
We showcase a few MQCC&amp;rsquo;s applications for its generality including an automatic generation of efficient error syndrome extraction schemes for fault-tolerant quantum error correction with heterogeneous qubits and an approach to writing approximate quantum Fourier transformation and quantum phase estimation that smoothly trades off accuracy and resource use.
We also illustrate that MQCC can easily encode prior one-off NISQ application designs &amp;mdash;multi-programming (MP), crosstalk mitigation (CM)&amp;mdash; as well as a combination of their optimization goals (i.e., a combined MP-CM).&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/despande05dbupdate.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/despande05dbupdate.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Toward On-line Schema Evolution for Non-stop Systems&lt;/b>.
Amol Deshpande and Michael Hicks.
Presented at the 11th High Performance Transaction Systems Workshop,
September 2005.&lt;/font>&lt;p>
Considers how to perform handle database schema evolution for on-line systems that are actively using the database whose schema is to be changed.&lt;/p>
 &lt;p>[&amp;nbsp;&lt;a href="https://mhicks.me/papers/db-dsu.pdf">.pdf&lt;/a>&amp;nbsp;]
&lt;a name="despande05dbupdate">&lt;/a>&lt;pre>
@misc{despande05dbupdate,
 author = {Amol Deshpande and Michael Hicks},
 title = {Toward On-line Schema Evolution for Non-stop Systems},
 howpublished = {Presented at the 11th High Performance Transaction Systems Workshop},
 month = {September},
 location = {Pacific Grove, CA},
 year = 2005
}
&lt;/pre>
&lt;hr>&lt;p>&lt;em>This file was generated by
&lt;a href="http://www.lri.fr/~filliatr/bibtex2html/">bibtex2html&lt;/a> 1.99.&lt;/em>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/elliott18checkedc.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/elliott18checkedc.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Checked C: Making C Safe by Extension&lt;/b>.
Archibald Samuel Elliott, Andrew Ruef, Michael Hicks, and David
Tarditi.
In &lt;em>Proceedings of the IEEE Conference on Secure Development
(SecDev)&lt;/em>, September 2018.&lt;/font>&lt;p>
This paper presents Checked C, an extension to C designed to support spatial safety, implemented in Clang and LLVM. Checked C&amp;rsquo;s design is distinguished by its focus on backward-compatibility, incremental conversion, developer control, and enabling highly performant code. Like past approaches to a safer C, Checked C employs a form of checked pointer whose accesses can be statically or dynamically verified. Performance evaluation on a set of standard benchmark programs shows overheads to be relatively low. More interestingly, Checked C introduces the notions of a checked region and bounds-safe interfaces.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/foster07improving.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/foster07improving.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Improving Software Quality with Static Analysis&lt;/b>.
Jeffrey S. Foster, Michael W. Hicks, and William Pugh.
In &lt;em>Proceedings of the ACM Workshop on Program Analysis for
Software Tools and Engineering (PASTE)&lt;/em>, pages 83&amp;ndash;84, June 2007.&lt;/font>&lt;p>
At the University of Maryland, we have been working to improve the
reliability and security of software by developing new, effective
static analysis tools. These tools scan software for bug patterns
or show that the software is free from a particular class of defects.
There are two themes common to our different projects:&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/fulton21rust.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/fulton21rust.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Benefits and Drawbacks of Adopting a Secure Programming Language: Rust
as a Case Study&lt;/b>.
Kelsey Fulton, Anna Chan, Dan Votipka, Michael Hicks, and Michelle
Mazurek.
In &lt;em>Proceedings of the Symposium on Usable Privacy and Security
(SOUPS)&lt;/em>, August 2021.&lt;/font>&lt;p>
Programming languages such as Rust and Go were developed to combat common and potentially devastating memory-safety-related vulnerabilities. Adoption of new, more secure languages is often seen as fraught and complex. We use Rust as a case study to better understand the benefits and challenges associated with this adoption. To this end, we conducted semi-structured interviews with professional, primarily senior software developers who have worked to introduce or worked with Rust on their teams (n = 16) and deployed a survey to the Rust development community (n = 178). We asked participants about their personal experiences using Rust, as well as experiences using Rust at their companies. We find a range of positive features, including good tooling and documentation, benefits for the development lifecycle, and improvement of overall secure coding skills, as well as drawbacks including a steep learning curve, limited library support, and concerns about the ability to hire additional Rust developers in the future. Our results have implications for promoting the adoption of Rust specifically and secure programming languages and tools more generally.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/fulton22contest.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/fulton22contest.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Understanding the how and the why: Exploring secure development practices
through a course competition&lt;/b>.
Kelsey R. Fulton, Daniel Votipka, Desiree Abrokwa, Michelle L.
Mazurek, Michael Hicks, and James Parker.
In &lt;em>Proceedings of the ACM Conference on Computer and
Communications Security (CCS)&lt;/em>, October 2022.&lt;/font>&lt;p>
This paper presents the results of in-depth study of 14 teams’ development processes during a three-week undergraduate course organized around a secure coding competition. Contest participants were expected to first build code to a specification&amp;mdash;emphasizing correctness, performance, and security&amp;mdash;and then to find vulnerabilities in other teams&amp;rsquo; code while fixing discovered vulnerabilities in their own code. Our study aimed to understand why developers introduce different vulnerabilities, the ways they evaluate programs for vulnerabilities, and why different vulnerabilities are (not) found and (not) fixed. We used iterative open coding to systematically analyze contest data including code, commit messages, and team design documents. Our results point to the importance of existing best practices for secure development, the use of security tools, and development team organization.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/furr08druby.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/furr08druby.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Static Type Inference for Ruby&lt;/b>.
Michael Furr, Jong hoon (David) An, Jeffrey S. Foster, and Michael
Hicks.
In &lt;em>Proceedings of the ACM Symposium on Applied Computing,
Object-oriented Programming Languages and Systems Track (OOPS)&lt;/em>, pages
1859&amp;ndash;1866, March 2009.&lt;/font>&lt;p>
Many general-purpose, object-oriented scripting languages are
dynamically typed, which provides flexibility but leaves the
programmer without the benefits of static typing, including early
error detection and the documentation provided by type
annotations. This paper describes Diamondback Ruby
(DRuby), a tool that blends Ruby&amp;rsquo;s dynamic type system with a
static typing discipline. DRuby provides a type
language that is rich enough to precisely type Ruby code we have
encountered, without unneeded complexity.
When possible, DRuby infers static types to discover
type errors in Ruby programs. When necessary, the programmer can
provide DRuby with
annotations that assign static types to dynamic code. These
annotations are checked at run time, isolating type errors to
unverified code. We applied DRuby to a suite of benchmarks and
found several bugs that would cause run-time type
errors. DRuby also reported a number of warnings that reveal questionable
programming practices in the benchmarks. We believe that DRuby
takes a major step toward bringing the benefits
of combined static and dynamic typing to Ruby and other
object-oriented languages.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/furr09ril.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/furr09ril.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>The Ruby Intermediate Language&lt;/b>.
Michael Furr, Jong hoon (David) An, Jeffrey S. Foster, and Michael
Hicks.
In &lt;em>Proceedings of the ACM SIGPLAN Dynamic Languages
Symposium (DLS)&lt;/em>, pages 89&amp;ndash;98, October 2009.&lt;/font>&lt;p>
Ruby is a popular, dynamic scripting language that aims to “feel
natural to programmers” and give users the “freedom to choose”
among many different ways of doing the same thing. While this
arguably makes programming in Ruby easier, it makes it hard to build
analysis and transformation tools that operate on Ruby source code.
In this paper, we present the Ruby Intermediate Language (RIL), a
Ruby front-end and intermediate representation that addresses these
challenges. Our system includes an extensible GLR parser for Ruby,
and an automatic translation into RIL, an easy-to-analyze
intermediate form. This translation eliminates redundant language
constructs, unravels the often subtle ordering among side effecting
operations, and makes implicit interpreter operations explicit in
its representation.&lt;p>
We demonstrate the usefulness of RIL by presenting a simple static
analysis and source code transformation to eliminate null pointer
errors in Ruby programs. We also describe several additional useful
features of RIL, including a pretty printer that outputs RIL as
syntactically valid Ruby code, a dataflow analysis engine, and a
dynamic instrumentation library for profiling source code. We hope
that RIL&amp;rsquo;s features will enable others to more easily build analysis
tools for Ruby, and that our design will inspire the creation of
similar frameworks for other dynamic languages.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/furr09stop.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/furr09stop.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Tests to the Left of Me, Types to the Right: How Not to Get Stuck in the
Middle of a Ruby Execution (A Demo of Diamondback Ruby)&lt;/b>.
Michael Furr, Jong hoon (David) An, Jeffrey S. Foster, and Michael
Hicks.
In &lt;em>Proceedings of the Workshop on Scripts to Programs (STOP)&lt;/em>,
July 2009.&lt;/font>&lt;p>
Ruby is a popular dynamic scripting language that permits
terse, expressive code, but provides no static checks to detect errors
before running the program. To address this, we have developed Diamondback
Ruby (DRuby), a tool that blends the beneﬁts of static and dynamic
typing. This paper brieﬂy describes the main features of DRuby, which
we will present in a tool demonstration. The presentation will concentrate
on the development of a small, statically typed Ruby program,
illustrating how DRuby might be used in practice. The audience will
learn about some of the practical design decisions that went into DRuby,
and how to use it to develop a type-safe Ruby program.&lt;p>[ &lt;a href="https://mhicks.me/papers/rubydemo.pdf">.pdf&lt;/a> ]
&lt;a name="furr09stop">&lt;/a>&lt;pre>
@inproceedings{furr09stop,
title = {Tests to the Left of Me, Types to the Right: How Not to Get Stuck in the Middle of a {Ruby} Execution (A Demo of Diamondback Ruby)},
author = {Michael Furr and Jong-hoon (David) An and Jeffrey S. Foster and Michael Hicks},
booktitle = {Proceedings of the Workshop on Scripts to Programs (STOP)},
year = 2009,
month = jul
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/grossman04cuj.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/grossman04cuj.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Cyclone: a Type-safe Dialect of C&lt;/b>.
Dan Grossman, Michael Hicks, Trevor Jim, and Greg Morrisett.
&lt;em>C/C++ Users Journal&lt;/em>, 23(1), January 2005.&lt;/font>&lt;p>
Cyclone is an effort to bring safety to C. This article briefly
introduces Cyclone.&lt;/p>
 &lt;p>[&amp;nbsp;&lt;a href="http://cyclone.thelanguage.org">http&lt;/a>&amp;nbsp;| 
&lt;a href="https://mhicks.me/papers/cyclone-cuj.pdf">.pdf&lt;/a>&amp;nbsp;]
&lt;a name="grossman04cuj">&lt;/a>&lt;pre>
@article{grossman04cuj,
 author = {Dan Grossman and Michael Hicks and Trevor Jim and Greg Morrisett},
 title = {Cyclone: a Type-safe Dialect of {C}},
 journal = {{C/C++} Users Journal},
 volume = 23,
 number = 1,
 month = {January},
 year = 2005,
 http = {&lt;a href="http://cyclone.thelanguage.org">http://cyclone.thelanguage.org&lt;/a>}
}
&lt;/pre>
&lt;hr>&lt;p>&lt;em>This file was generated by
&lt;a href="http://www.lri.fr/~filliatr/bibtex2html/">bibtex2html&lt;/a> 1.99.&lt;/em>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/GrossmanMJHWC02tr.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/GrossmanMJHWC02tr.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Formal Type Soundness for Cyclone&amp;rsquo;s Region System&lt;/b>.
Dan Grossman, Greg Morrisett, Trevor Jim, Michael Hicks, Yanling
Wang, and James Cheney.
Technical Report CS 2001-1856, Cornell University, November 2001.&lt;/font>&lt;p>&lt;p>[ &lt;a href="https://mhicks.me/papers/cyclone_regions_tr.pdf">.pdf&lt;/a> ]
&lt;a name="GrossmanMJHWC02tr">&lt;/a>&lt;pre>
@techreport{GrossmanMJHWC02tr,
author = {Dan Grossman and Greg Morrisett and Trevor Jim and Michael Hicks and Yanling Wang and James Cheney},
title = {Formal Type Soundness for {Cyclone}&amp;rsquo;s Region System},
number = {CS 2001-1856},
month = nov,
year = 2001,
institution = {Cornell University}
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/guts11coco.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/guts11coco.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>A demo of Coco: a compiler for monadic coercions in ML&lt;/b>.
Nataliya Guts, Michael Hicks, Nikhil Swamy, and Daan Leijen.
In &lt;em>Informal proceedings of the ML Workshop&lt;/em>, September 2011.&lt;/font>&lt;p>
Combining monadic computations may induce a significant syntactic overhead.
To allow monadic programming in direct style, we have developed Coco, a type-based tool that automatically rewrites ML code inserting necessary binds, unit, and morphisms between monads.
This tool demonstration will show how to take advantage of Coco to facilitate using monadic libraries in practice,
and will discuss possible future development of Coco to fit the actual needs of programmers.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hammer13adapton.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hammer13adapton.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Adapton: Composable, Demand-Driven Incremental Computation&lt;/b>.
Matthew Hammer, Yit Phang Khoo, Michael Hicks, and Jeffrey S. Foster.
In &lt;em>Proceedings of the ACM Conference on Programming Language
Design and Implementation (PLDI)&lt;/em>, June 2014.&lt;/font>&lt;p>
Many researchers have proposed programming languages that
support &lt;em>incremental computation&lt;/em> (IC), which allows programs
to be efficiently re-executed after a small change to the
input. However, existing implementations of such languages have two
important drawbacks. First, recomputation is oblivious to
specific demands on the program output; that is, if a program input
changes, all dependencies will be recomputed, even if an observer no
longer requires certain outputs. Second, programs are made
incremental as a unit, with little or no support for reusing
results outside of their original context, e.g., when reordered. &lt;p>
To address these problems, we present λ&lt;sup>CDD&lt;/sup>&lt;sub>IC&lt;/sub>, a core calculus that
applies a &lt;em>demand-driven&lt;/em> semantics to incremental computation,
tracking changes in a hierarchical fashion in a novel &lt;em>demanded
computation graph&lt;/em>. λ&lt;sup>CDD&lt;/sup>&lt;sub>IC&lt;/sub> also formalizes an explicit separation
between inner, incremental computations and outer observers. This
combination ensures λ&lt;sup>CDD&lt;/sup>&lt;sub>IC&lt;/sub> programs only recompute computations as
demanded by observers, and allows inner computations to be reused
more liberally. We present Adapton, an OCaml library implementing
λ&lt;sup>CDD&lt;/sup>&lt;sub>IC&lt;/sub>. We evaluated Adapton on a range of benchmarks, and found
that it provides reliable speedups, and in many cases dramatically
outperforms state-of-the-art IC approaches.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hammer14nominal.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hammer14nominal.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Incremental Computation with Names&lt;/b>.
Matthew Hammer, Kyle Headley, Nicholas Labich, Jeffrey S. Foster,
Michael Hicks, David Van Horn, and Jana Dunfield.
In &lt;em>Proceedings of the ACM Conference on Object-Oriented
Programming Languages, Systems, and Applications (OOPSLA)&lt;/em>, October 2015.&lt;/font>&lt;p>
Over the past thirty years, there has been significant progress in
developing general-purpose, language-based approaches to
&lt;em>incremental computation&lt;/em>, which aims to efficiently update the
result of a computation when an input is changed. A key design
challenge in such approaches is how to provide efficient incremental
support for a broad range of programs. In this paper, we argue that
first-class &lt;em>names&lt;/em> are a critical linguistic feature for
efficient incremental computation. Names identify computations to be
reused across differing runs of a program, and making them first
class gives programmers a high level of control over reuse. We
demonstrate the benefits of names by presenting Nominal Adapton, an
ML-like language for incremental computation with names. We describe
how to use Nominal Adapton to efficiently incrementalize several
standard programming patterns&amp;mdash;including maps, folds, and
unfolds&amp;mdash;and show how to build efficient, incremental probabilistic
trees and tries. Since Nominal Adapton&amp;rsquo;s implementation is subtle,
we formalize it as a core calculus and prove it is
&lt;em>from-scratch consistent&lt;/em>, meaning it always produces the same
answer as simply re-running the computation. Finally, we demonstrate
that Nominal Adapton can provide large speedups over both
from-scratch computation and Adapton, a previous state-of-the-art
incremental system.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hayden09testing.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hayden09testing.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Efficient Systematic Testing for Dynamically Updatable Software&lt;/b>.
Christopher M. Hayden, Eric A. Hardisty, Michael Hicks, and
Jeffrey S. Foster.
In &lt;em>Proceedings of the Workshop on Hot Topics in Software
Upgrades (HotSWUp)&lt;/em>, October 2009.
Invited article.&lt;/font>&lt;p>
Recent years have seen significant advances in dynamic software
updating (DSU) systems, which allow programs to be patched
on the fly. However, a significant challenge remains: How can we
ensure the act of applying a patch does not itself introduce errors?
In this paper, we address this problem by presenting a new systematic
testing methodology for updatable programs.
Our idea is to transform standard
system tests into &lt;em>update tests&lt;/em> that execute as before, but
each transformed test applies a patch at a different &lt;em>update point&lt;/em> during
execution. To mitigate the increase in the number of tests, we
developed an algorithm for &lt;em>test suite
minimization&lt;/em> that finds a subset of update points that, if fully
tested, yields the equivalent to full update point coverage. We
implemented our approach and evaluated it on OpenSSH and Vsftpd, two
widely used server applications. We found that minimization is
highly effective, reducing the number of update tests required
for full coverage by 93%.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hayden09testingTR.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hayden09testingTR.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>A Testing Based Empirical Study of Dynamic Software Update Safety
Restrictions&lt;/b>.
Christopher M. Hayden, Eric A. Hardisty, Michael Hicks, and
Jeffrey S. Foster.
Technical Report CS-TR-4949, University of Maryland, Department of
Computer Science, November 2009.&lt;/font>&lt;p>
Recent years have seen significant advances in dynamic software
updating (DSU) systems, which allow programs to be patched on the
fly. Most DSU systems employ automatic safety checks to avoid
applying a patch if doing so may lead to incorrect behavior.
This
paper presents what we believe is the first comprehensive empirical evaluation
of the two most significant DSU safety checks: &lt;em>activeness
safety&lt;/em> (AS), which disallows patches that modify functions
on the stack, and &lt;em>con-freeness safety&lt;/em>
(CFS), which allows modifications to active functions, but only
when doing so will be type safe.&lt;p>
To measure the checks&amp;rsquo; effectiveness, we tested them
against three years of updates to OpenSSH and
vsftpd. We performed this testing using a novel DSU testing methodology that
systematically applies updates throughout the
execution of a test suite. After testing updates to both
applications in this way, we tracked how often the safety checks
allow updates and which updates result in
test failures. We found that updating without safety checks
produced
many failures, and that both AS and CFS dramatically reduced, but did not
fully eliminate, these failures. CFS yielded more failures
than AS, but
AS was more restrictive than CFS, disallowing far
more successful updates.
Our results suggest that neither AS nor CFS is likely
suitable for general-purpose DSU on its own.
Indeed, we found that selecting update points manually could
avoid all failures while still permitting sufficient updates.
Our results present a challenge and important insights for future
work: to discover
safe and sufficient update points fully automatically.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hayden11dsucorrectTR.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hayden11dsucorrectTR.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Specifying and Verifying the Correctness of Dynamic Software Updates&lt;/b>.
Christopher M. Hayden, Stephen Magill, Michael Hicks, Nate Foster,
and Jeffrey S. Foster.
Technical Report CS-TR-4997, University of Maryland Department of
Computer Science, November 2011.
Extended version of VSTTE'12 paper with proofs of theorems and
additional discussion.&lt;/font>&lt;p>
Dynamic software updating (DSU) systems allow running programs to be patched on-the-fly to add features or fix bugs. While dynamic updates can be tricky to write, techniques for establishing their correctness have received little attention. In this paper, we present the first methodology for automatically verifying the correctness of dynamic updates. Programmers express the desired properties of an updated execution using client-oriented specifications (CO-specs), which can describe a wide range of client-visible behaviors. We verify CO-specs automatically by using off-the-shelf tools to analyze a merged program, which is a combination of the old and new versions of a program. We formalize the merging transformation and prove it correct. We have implemented a program merger for C, and applied it to updates for the Redis key-value store and several synthetic programs. Using Thor, a verification tool, we could verify many of the synthetic programs; using Otter, a symbolic executor, we could analyze every program, often in less than a minute. Both tools were able to detect faulty patches and incurred only a factor-of-four slowdown, on average, compared to single version programs.&lt;p>[ &lt;a href="https://mhicks.me/papers/dsucorrectnessTR.pdf">.pdf&lt;/a> ]
&lt;a name="hayden11dsucorrectTR">&lt;/a>&lt;pre>
@techreport{hayden11dsucorrectTR,
title = {Specifying and Verifying the Correctness of Dynamic Software Updates},
author = {Christopher M. Hayden and Stephen Magill and Michael Hicks and Nate Foster and Jeffrey S. Foster},
institution = {University of Maryland Department of Computer Science},
number = {CS-TR-4997},
year = 2011,
month = nov,
note = {Extended version of VSTTE'12 paper with proofs of theorems and additional discussion}
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hayden12kitsune.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hayden12kitsune.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Kitsune: Efficient, General-purpose Dynamic Software Updating for C&lt;/b>.
Christopher M. Hayden, Edward K. Smith, Michail Denchev, Michael
Hicks, and Jeffrey S. Foster.
In &lt;em>Proceedings of the ACM Conference on Object-Oriented
Programming Languages, Systems, and Applications (OOPSLA)&lt;/em>, October 2012.&lt;/font>&lt;p>
Dynamic software updating (DSU) systems allow programs to be updated
while running, thereby permitting developers to add features and fix
bugs without downtime. This paper introduces Kitsune, a new DSU
system for C whose design has three notable features. First,
Kitsune&amp;rsquo;s updating mechanism updates the whole program, not
individual functions. This mechanism is more flexible than most
prior approaches and places no restrictions on data representations
or allowed compiler optimizations. Second, Kitsune makes the
important aspects of updating explicit in the program text, making
the program&amp;rsquo;s semantics easy to understand while minimizing programmer effort. Finally, the programmer can write simple specifications to
direct Kitsune to generate code that traverses and transforms
old-version state for use by new code; such state
transformation is often necessary, and is significantly more
difficult in prior DSU systems. We have used Kitsune
to update five popular, open-source, single- and multi-threaded
programs, and find that few program changes are required to use
Kitsune, and that it incurs essentially no performance overhead.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hayden12quiescence.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hayden12quiescence.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>A Study of Dynamic Software Update Quiescence for Multithreaded Programs&lt;/b>.
Christopher M. Hayden, Karla Saur, Michael Hicks, and Jeffrey S.
Foster.
In &lt;em>Proceedings of the Workshop on Hot Topics in Software
Upgrades (HotSWUp)&lt;/em>, pages 6&amp;ndash;10, June 2012.&lt;/font>&lt;p>
Dynamic software updating (DSU) techniques show great promise in
allowing vital software services to be upgraded without downtime,
avoiding dropped connections and the loss of critical program state.
For multithreaded programs, DSU systems must balance
&lt;em>correctness&lt;/em> and &lt;em>timeliness&lt;/em>. To simplify reasoning
that an update is correct, we could limit updates to take place only
when all threads have blocked at well-defined &lt;em>update
points&lt;/em>. However, several researchers have pointed out that this
approach poses the risk of delaying an update for too long, even
indefinitely, and therefore have developed fairly complicated
mechanisms to mitigate the risk. This paper argues that such
mechanisms are unnecessary by demonstrating empirically that
many multithreaded programs can be updated
with minimal delay using only a small number of manually annotated
update points. Our study of the time taken for all of the
threads in six real-world, event-driven programs to reach
their update points ranged from 0.155 to 107.558 ms,
and most were below 1 ms.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hayden12testing-journal.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hayden12testing-journal.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Evaluating Dynamic Software Update Safety Using Efficient Systematic
Testing&lt;/b>.
Christopher M. Hayden, Edward K. Smith, Eric A. Hardisty, Michael
Hicks, and Jeffrey S. Foster.
&lt;em>IEEE Transactions on Software Engineering&lt;/em>, 38(6):1340&amp;ndash;1354,
December 2012.
Accepted September 2011.&lt;/font>&lt;p>
Dynamic software updating (DSU) systems patch programs
on the fly without incurring downtime.
To avoid failures due to the updating process itself,
many DSU systems employ &lt;em>timing restrictions&lt;/em>.
However, timing restrictions are theoretically
imperfect, and their practical effectiveness is an open question.&lt;p>
This paper presents the first significant empirical evaluation of
three popular timing restrictions: &lt;em>activeness safety&lt;/em> (AS),
which prevents updates to active functions;
&lt;em>con-freeness safety&lt;/em> (CFS), which only allows modifications to
active functions when doing so is provably type-safe; and
&lt;em>manual identification&lt;/em> of the event-handling loops during which an
update may occur.&lt;p>
We evaluated these timing restrictions using a series of DSU patches
to three programs:
OpenSSH, vsftpd, and ngIRCd. We systematically applied
updates at each distinct update point reached during execution of
a suite of system tests for these programs
to determine which updates pass and which fail.
We found that all
three timing restrictions prevented most
failures, but only manual identification allowed none. Further,
although CFS and AS allowed many
more update points, manual identification
still supported updates with minimal delay. Finally,
we found that manual identification required the least developer effort.
Overall, we conclude that manual identification is most effective.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hayden14kitsune-journal.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hayden14kitsune-journal.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Efficient, General-purpose Dynamic Software Updating for C&lt;/b>.
Christopher M. Hayden, Karla Saur, Edward K. Smith, Michael Hicks,
and Jeffrey S. Foster.
&lt;em>ACM Transactions on Programming Languages and Systems
(TOPLAS)&lt;/em>, 36(4):13, October 2014.&lt;/font>&lt;p>
Dynamic software updating (DSU) systems
facilitate software updates to running programs,
thereby permitting developers to add features and fix
bugs without downtime. This paper introduces Kitsune, a DSU
system for C. Kitsune&amp;rsquo;s design has three notable features. First,
Kitsune updates the whole program, rather than
individual functions, using a mechanism that places no restrictions on data
representations or allowed compiler optimizations.
Second, Kitsune makes the
important aspects of updating explicit in the program text, making
the program&amp;rsquo;s semantics easy to understand while minimizing programmer effort.
Finally, the programmer can write simple specifications to
direct Kitsune to generate code that traverses and transforms
old-version state for use by new code; such state
transformation is often necessary and is significantly more
difficult in prior DSU systems. We have used Kitsune
to update six popular, open-source, single- and multi-threaded
programs, and find that few program changes are required to use
Kitsune, that it incurs essentially no performance overhead,
and that update times are fast.&lt;p>[ &lt;a href="https://mhicks.me/papers/kitsune-journal.pdf">.pdf&lt;/a> ]
&lt;a name="hayden14kitsune-journal">&lt;/a>&lt;pre>
@article{hayden14kitsune-journal,
title = {Efficient, General-purpose Dynamic Software Updating for C},
author = {Christopher M. Hayden and Karla Saur and Edward K. Smith and Michael Hicks and Jeffrey S. Foster},
journal = {{ACM} Transactions on Programming Languages and Systems (TOPLAS)},
month = oct,
year = 2014,
volume = 36,
number = 4,
pages = 13
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hayden2011xfer.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hayden2011xfer.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>State Transfer for Clear and Efficient Runtime Upgrades&lt;/b>.
Christopher M. Hayden, Edward K. Smith, Michael Hicks, and Jeffrey S.
Foster.
In &lt;em>Proceedings of the Workshop on Hot Topics in Software
Upgrades (HotSWUp)&lt;/em>, pages 179&amp;ndash;184, April 2011.&lt;/font>&lt;p>&lt;/p>
&lt;p>Dynamic software updating (DSU), the practice of updating software while it
executes, is a lively area of research. The DSU approach most
prominent in both commercial and research systems is &lt;em>in-place
updating&lt;/em>, in which patches containing program modifications are
loaded into a running
process. However, in-place updating suffers from several problems: it
requires complex tool support, it may adversely affect the performance of
normal execution, it requires challenging reasoning to understand the
behavior of an updated program, and it requires extra effort to modify
program state to be compatible with an update.&lt;p>
This paper presents preliminary work investigating the potential for &lt;em>state
transfer updating&lt;/em> to address these problems. State transfer updates
work by launching a new process running the updated program version
and transferring program state from the running process to the updated
version. In this paper, we describe the use and implementation of
Ekiden, a new state transfer updating library for C/C++ programs.
Ekiden seeks to redress the difficulties of in-place updating, and we report
on our experience updating vsftpd using Ekiden. This initial
experience suggests that state transfer provides the availability
benefits of in-place DSU approaches while addressing many of their
shortcomings.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/Hicks01.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/Hicks01.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Dynamic Software Updating&lt;/b>.
Michael Hicks.
PhD thesis, Department of Computer and Information Science,
University of Pennsylvania, August 2001.
Winner of the 2002 ACM SIGPLAN Doctoral Dissertation award.&lt;/font>&lt;p>&lt;p>[ &lt;a href="https://mhicks.me/papers/thesis.pdf">.pdf&lt;/a> ]
&lt;a name="Hicks01">&lt;/a>&lt;pre>
@phdthesis{Hicks01,
author = {Michael Hicks},
title = {Dynamic Software Updating},
year = 2001,
month = {August},
school = {Department of Computer and Information Science, University of Pennsylvania},
note = {Winner of the 2002 {ACM SIGPLAN Doctoral Dissertation} award}
}
&lt;/pre>&lt;/p>
&lt;hr>&lt;p>&lt;em>This file was generated by
&lt;a href="http://www.lri.fr/~filliatr/bibtex2html/">bibtex2html&lt;/a> 1.99.&lt;/em>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hicks03medianettr.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hicks03medianettr.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>User-specified Adaptive Scheduling in a Streaming Media Network&lt;/b>.
Michael Hicks, Adithya Nagarajan, and Robbert van Renesse.
Technical Report CS-TR-4430, University of Maryland Department of
Computer Science, March 2003.&lt;/font>&lt;p>
In disaster and combat situations, mobile cameras
and other sensors transmit real-time data, used by
many operators and/or analysis tools. Unfortunately,
in the face of limited, unreliable resources, and varying demands, not all users may be able to get the&lt;br>
fidelity they require. This paper describes MediaNet, a distributed multi-media processing system designed with the above scenarios in mind. Unlike past&lt;br>
approaches, MediaNet&amp;rsquo;s users can intuitively specify how the system should adapt based on their individual needs. MediaNet uses both local and on-line global resource scheduling to improve user performance and network utilization, and adapts without requiring underlying support for resource reservations. Performance experiments show that our
scheduling algorithm is reasonably fast, and that user
performance and network utilization are both significantly improved.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hicks03safe.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hicks03safe.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Safe and Flexible Memory Management in Cyclone&lt;/b>.
Michael Hicks, Greg Morrisett, Dan Grossman, and Trevor Jim.
Technical Report CS-TR-4514, University of Maryland Department of
Computer Science, July 2003.&lt;/font>&lt;p>
Cyclone is a type-safe programming language intended for applications
requiring control over memory management. Our previous work on
Cyclone included support for stack allocation, lexical region
allocation, and a garbage-collected heap. We achieved safety (i.e.,
prevented dangling pointers) through a region-based type-and-effects
system. This paper describes some new memory-management mechanisms
that we have integrated into Cyclone: dynamic regions, unique
pointers, and reference-counted objects. Our experience shows that
these new mechanisms are well suited for the timely recovery of
objects in situations where it is awkward to use lexical regions.
Crucially, programmers can write reusable functions without
unnecessarily restricting callers&amp;rsquo; choices among the variety of
memory-management options. To achieve this goal, Cyclone employs a
combination of polymorphism and scoped constructs that temporarily let
us treat objects as if they were allocated in a lexical region. In
our experience, our new constructs can significantly improve
application performance, while adding a modest programming overhead.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hicks04experience.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hicks04experience.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Experience with Safe Manual Memory Management in Cyclone&lt;/b>.
Michael Hicks, Greg Morrisett, Dan Grossman, and Trevor Jim.
In &lt;em>Proceedings of the ACM International Symposium on Memory
Management (ISMM)&lt;/em>, pages 73&amp;ndash;84, October 2004.
An abstract of this paper appeared in SPACE `04,
&lt;a href="http://www.diku.dk/topps/space2004/space_final/hicks-grossman-jim.pdf">
&lt;a href="http://www.diku.dk/topps/space2004/space_final/hicks-grossman-jim.pdf" target="_blank" rel="noopener">http://www.diku.dk/topps/space2004/space_final/hicks-grossman-jim.pdf&lt;/a>&lt;/a>.&lt;/font>&lt;p>
The goal of the Cyclone project is to investigate
type safety for low-level languages such as C . Our
hardest challenge has been providing programmers control over memory
management while retaining type safety. This paper reports on our
experience trying to integrate and effectively use two previously
proposed, type-safe memory management mechanisms: statically-scoped regions
and unique pointers. We found that these typing mechanisms can be combined
to build alternative memory-management abstractions, such as reference
counted objects and arenas with dynamic lifetimes, and thus provide
a flexible basis. Our experience&amp;mdash;porting C code and building new
applications for resource-constrained systems&amp;mdash;confirms that experts can use
these features to improve memory footprint and
sometimes to improve
throughput when used instead of, or in combination with, a conservative
garbage collector.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hicks05secupdate.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hicks05secupdate.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Dynamic Updating of Information-Flow Policies&lt;/b>.
Michael Hicks, Stephen Tse, Boniface Hicks, and Steve Zdancewic.
In &lt;em>Proceedings of the International Workshop on Foundations of
Computer Security (FCS)&lt;/em>, pages 7&amp;ndash;18, June 2005.&lt;/font>&lt;p>
Applications that manipulate sensitive information should ensure
&lt;em>end-to-end&lt;/em> security by satisfying two properties:
&lt;em>sound execution&lt;/em> and some form of &lt;em>noninterference&lt;/em>. By
the former, we mean the program should always perform actions in
keeping with its current policy, and by the latter we mean that these
actions should never cause high-security information to be visible to
a low-security observer. Over the last decade, security-typed
languages have been developed that exhibit these properties,
increasingly improving so as to model important features of real
programs.
No current security-typed language, however, permits general changes
to security policies in use by running programs. This paper presents
a simple information flow type system that allows for dynamic
security policy updates while ensuring sound execution and a relaxed
form of noninterference we term
&lt;em>noninterference between updates&lt;/em>. We see this work as an
important step toward using language-based techniques to ensure
end-to-end security for realistic applications.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hicks06atomic.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hicks06atomic.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Inferring Locking for Atomic Sections&lt;/b>.
Michael Hicks, Jeffrey S. Foster, and Polyvios Pratikakis.
In &lt;em>On-line Proceedings of the ACM SIGPLAN Workshop on Languages,
Compilers, and Hardware Support for Transactional Computing (TRANSACT)&lt;/em>, June
2006.&lt;/p>
&lt;p>&lt;a href="http://www.cs.purdue.edu/homes/jv/events/TRANSACT/transact-06.tgz">
&lt;a href="http://www.cs.purdue.edu/homes/jv/events/TRANSACT/transact-06.tgz" target="_blank" rel="noopener">http://www.cs.purdue.edu/homes/jv/events/TRANSACT/transact-06.tgz&lt;/a>&lt;/a>.&lt;/font>&lt;p>
Software transactions allow the programmer to specify sections of
code that should be serializable, without the programmer needing to
worry about exactly how atomicity is enforced. Recent research
proposes using optimistic concurrency to implement transactions. In
this short paper, we propose a pessimistic lock-based technique that
uses the results of static whole-program analysis to enforce
atomicity. The input to our analysis is a program that contains
programmer-specified atomic sections and calls to fork. We present
a sharing inference algorithm that uses the results of points-to
analysis to determine which memory locations are shared. Our
analysis uses &lt;em>continuation effects&lt;/em> to track the locations
accessed after a point in the program. This allows data to be
thread-local before a fork and thread-shared afterward. We then
present a mutex inference algorithm that determines a sufficient set
of locks to guard accesses to shared locations. After mutex
inference, a compiler adds the appropriate lock acquires and
releases to the beginning and end of atomic sections. Our algorithm
is efficient, and provides parallelism according to precision of the
alias analysis while minimizing the number of required locks.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hicks06trusted.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hicks06trusted.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Trusted Declassification: high-level policy for a security-typed
language&lt;/b>.
Boniface Hicks, Dave King, Patrick McDaniel, and Michael Hicks.
In &lt;em>Proceedings of the ACM SIGPLAN Workshop on Programming
Languages and Analysis for Security (PLAS)&lt;/em>, pages 65&amp;ndash;74, June 2006.&lt;/font>&lt;p>
Security-typed languages promise to be a powerful tool with which
provably secure software applications may be developed. Programs
written in these languages enforce a strong, global policy of
&lt;em>noninterference&lt;/em> which ensures that high-security data will
not be observable on low-security channels. Because noninterference
is typically too strong a property, most programs use some form of
&lt;em>declassification&lt;/em> to selectively leak high security information,
e.g. when performing a password check or data encryption.
Unfortunately, such a declassification is often expressed as an
operation within a given program, rather than as part of a global
policy, making reasoning about the security implications of a policy
more difficult.&lt;p>
In this paper, we propose a simple idea we call &lt;i>trusted
declassification&lt;/i> in which special &lt;em>declassifier&lt;/em> functions are
specified as part of the global policy. In particular, individual
principals declaratively specify which declassifiers they trust so
that all information flows implied by the policy can be reasoned
about in absence of a particular program. We formalize our approach
for a Java-like language and prove a modified form of
noninterference which we call &lt;em>noninterference modulo trusted methods&lt;/em>. We have implemented
our approach as an extension to Jif and provide some of our
experience using it to build a secure e-mail client.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hicks06trustedtr.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hicks06trustedtr.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Trusted Declassification: high-level policy for a security-typed language
(Extended version)&lt;/b>.
Boniface Hicks, Dave King, Patrick McDaniel, and Michael Hicks.
Technical Report NAS-TR-033-2006, Department of Computer Science and
Engineering, the Pennsylvania State University, June 2006.
Extended version of the PLAS 2006 paper with full formal development.&lt;/font>&lt;p>
Security-typed languages promise to be a powerful tool with which
provably secure software applications may be developed. Programs
written in these languages enforce a strong, global policy of
&lt;em>noninterference&lt;/em> which ensures that high-security data will
not be observable on low-security channels. Because noninterference
is typically too strong a property, most programs use some form of
&lt;em>declassification&lt;/em> to selectively leak high security information,
e.g. when performing a password check or data encryption.
Unfortunately, such a declassification is often expressed as an
operation within a given program, rather than as part of a global
policy, making reasoning about the security implications of a policy
more difficult.&lt;p>
In this paper, we propose a simple idea we call &lt;i>trusted
declassification&lt;/i> in which special &lt;em>declassifier&lt;/em> functions are
specified as part of the global policy. In particular, individual
principals declaratively specify which declassifiers they trust so
that all information flows implied by the policy can be reasoned
about in absence of a particular program. We formalize our approach
for a Java-like language and prove a modified form of
noninterference which we call &lt;em>noninterference modulo trusted methods&lt;/em>. We have implemented
our approach as an extension to Jif and provide some of our
experience using it to build a secure e-mail client.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hicks07xdomtr.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hicks07xdomtr.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Toward Specifying and Validating Cross-Domain Policies&lt;/b>.
Michael Hicks, Nikhil Swamy, and Simon Tsang.
Technical Report CS-TR-4870, Department of Computer Science,
University of Maryland, April 2007.&lt;/font>&lt;p>
Formal security policies are extremely useful for two related reasons.
First, they allow a policy to be considered in isolation, separate
from programs under the purview of the policy and separate from the
implementation of the policy&amp;rsquo;s enforcement. Second, policies can be
checked for compliance against higher-level security goals by using
automated analyses. By contrast, ad hoc enforcement mechanisms (for
which no separate policies are specified) enjoy neither benefit, and
non-formal policies enjoy the first but not the second.&lt;p>
We would like to understand how best to define
(and enforce) multi-level security policies when information must be
shared across domains that have varying levels of trust (the so-called
“cross domain” problem). Because we wish to show such policies meet
higher-level security goals with high assurance, we are interested in
specifying cross domain policies formally, and then reasoning about
them using automated tools. In this report, we briefly survey
work that presents formal security policies with cross-domain
concerns, in particular with respect to the problem of
&lt;em>downgrading&lt;/em>. We also describe correctness properties for such
policies, all based on &lt;em>noninterference&lt;/em>. Finally, we briefly
discuss recently-developed tools for analyzing formal security
policies; though no existing tools focus on the analysis of
downgrading-oriented policies, existing research points the way
to providing such support.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hicks10score.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hicks10score.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Adapting Scrum to Managing a Research Group&lt;/b>.
Michael Hicks and Jeffrey S. Foster.
Technical Report CS-TR-4966, University of Maryland, Department of
Computer Science, September 2010.&lt;/font>&lt;p>Score is an adaptation of the Scrum agile software development methodology to the task of managing Ph.D. students in an academic research group. This paper describes Score, conceived in October 2006, and our experience using it. We have found that Score enables us&amp;mdash;faculty and students&amp;mdash;to be more efficient and thereby more productive, and enhances the cohesion of our research group.&lt;p>[ &lt;a href="https://mhicks.me/papers/score.pdf">.pdf&lt;/a> ]
&lt;a name="hicks10score">&lt;/a>&lt;pre>
@techreport{hicks10score,
title = {Adapting {Scrum} to Managing a Research Group},
author = {Michael Hicks and Jeffrey S. Foster},
institution = {University of Maryland, Department of Computer Science},
number = {CS-TR-4966},
month = sep,
year = 2010
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hicks10scoreshort.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hicks10scoreshort.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Score: Agile Research Group Management&lt;/b>.
Michael Hicks and Jeffrey S. Foster.
&lt;em>Communications of the ACM&lt;/em>, 53(10):30&amp;ndash;31, October 2010.&lt;/font>&lt;p>Score is an adaptation of the Scrum agile software development methodology to the task of managing Ph.D. students in an academic research group. This paper describes Score, conceived in October 2006, and our experience using it. We have found that Score enables us&amp;mdash;faculty and students&amp;mdash;to be more efficient and thereby more productive, and enhances the cohesion of our research group.&lt;p>[ &lt;a href="https://mhicks.me/papers/score-short.pdf">.pdf&lt;/a> ]
&lt;a name="hicks10scoreshort">&lt;/a>&lt;pre>
@article{hicks10scoreshort,
title = {Score: Agile Research Group Management},
author = {Michael Hicks and Jeffrey S. Foster},
journal = {Communications of the {ACM}},
month = oct,
volume = {53},
number = {10},
pages = {30&amp;ndash;31},
year = 2010
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hicks12polymonadTR.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hicks12polymonadTR.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Polymonads&lt;/b>.
Nataliya Guts, Michael Hicks, Nikhil Swamy, Daan Leijen, and Gavin
Bierman.
Technical Report XXX, University of Maryland Department of Computer
Science, July 2012.
Extended version of POPL'13 submission.&lt;/font>&lt;p>
From their semantic origins to their use in structuring effectful
computations, monads are now also used as a programming pattern to
structure code in a number of important scenarios, including
functional reactivity, information flow tracking and probabilistic
computation. However, whilst these examples are inspired by monads
they are not strictly speaking monadic but rather something more
general. The first contribution of this paper is the definition of a
new structure, the polymonad, which subsumes monads and encompasses
the monad-like programming patterns that we have observed. A
concern is that given such a general setting, a program would
quickly become polluted with polymonadic coercions, making it hard
to read and maintain. The second contribution of this paper is to
build on previous work to define a polymorphic type inference
algorithm that supports programming with polymonads using a direct
style, e.g., as if computations of type &lt;em>M&lt;/em> τ were expressions
of type τ. During type inference the program is rewritten to
insert the necessary polymonadic coercions, a process that we prove
is coherent&amp;mdash;all sound rewritings produce programs with the same
semantics. The resulting programming style is powerful and
lightweight.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hicks12popl.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hicks12popl.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>POPL'12 Program Chair&amp;rsquo;s Report (or, how to run a medium-sized
conference)&lt;/b>.
Michael Hicks.
&lt;em>SIGPLAN Notices&lt;/em>, 47(4), April 2012.&lt;/font>&lt;p>
It was a pleasure and a privilege to serve as the program committee
(PC) chair of the 39th Symposium on the Principles of Programming
Languages (POPL). This paper describes the review process we used,
why we used it, and an assessment of how it worked out.&lt;p>
We made some substantial changes to the review process this year, most
notably by incorporating a form of double-blind reviewing. These and
other changes were made in an attempt to improve accepted paper
quality, as well as to improve review quality and fairness (both of which
ultimately support paper quality).&lt;p>
Much of this paper argues in favor of these changes based on
principle, i.e., why one might think the process should increase
quality. Ideally we could also evaluate the process directly, i.e.,
by showing that this year&amp;rsquo;s program was better than it would have been
under a different review process. Unfortunately, I think it would be
very difficult to efficiently evaluate a review process directly
(e.g., by having two committees and two review processes on the same
papers). As such, I exercised a more tractable alternative: I polled
the authors and reviewers to report on their experience, and to see
whether that experience convinces them that the process has merit. In
most cases, the answer was “yes.”&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hicks17plas.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hicks17plas.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Languages for Oblivious Computation&lt;/b>.
Michael Hicks.
In &lt;em>Proceedings of the ACM SIGPLAN Workshop on Programming
Languages and Analysis for Security (PLAS)&lt;/em>, October 2017.&lt;/font>&lt;p>
This is a 1-page abstract of my keynote talk at Workshop on
Programming Languages and Security, colocated with the ACM
Symposium on Computer and Communications Security. It discusses
the role of programming languages in ensuring oblivious (side
channel-free) computation.&lt;/p>
 &lt;p>[&amp;nbsp;&lt;a href="https://mhicks.me/papers/mto-plas-keynote.pdf">.pdf&lt;/a>&amp;nbsp;]
&lt;a name="hicks17plas">&lt;/a>&lt;pre>
@inproceedings{hicks17plas,
 author = {Michael Hicks},
 title = {Languages for Oblivious Computation},
 booktitle = {Proceedings of the {ACM SIGPLAN} Workshop on Programming Languages and Analysis for Security (PLAS)},
 year = {2017},
 month = oct
}
&lt;/pre>
&lt;hr>&lt;p>&lt;em>This file was generated by
&lt;a href="http://www.lri.fr/~filliatr/bibtex2html/">bibtex2html&lt;/a> 1.99.&lt;/em>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/Hicks98A.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/Hicks98A.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Types and Intermediate Representations&lt;/b>.
Michael Hicks.
Technical Report MS-CIS-98-05, Department of Computer and Information
Science, University of Pennsylvania, April 1998.&lt;/font>&lt;p>The design objectives and the mechanisms for achieving those
objectives are considered for each of three systems, Java, Erlang, and
TIL. In particular, I examine the use of types and intermediate
representations in the system implementation. In addition, the systems
are compared to examine how one system&amp;rsquo;s mechanisms may (or may not)
be applied to another.&lt;p>[ &lt;a href="https://mhicks.me/papers/typedIR.ps">.ps&lt;/a> ]
&lt;a name="Hicks98A">&lt;/a>&lt;pre>
@techreport{Hicks98A,
author = {Michael Hicks},
title = {{Types and Intermediate Representations}},
institution = {Department of Computer and Information Science, University of Pennsylvania},
type = {Technical Report},
number = {MS-CIS-98-05},
month = {April},
year = {1998}
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/HicksJKMU99.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/HicksJKMU99.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Transparent Communication for Distributed Objects in Java&lt;/b>.
Michael Hicks, Suresh Jagannathan, Richard Kelsey, Jonathan T. Moore,
and Cristian Ungureanu.
In &lt;em>Proceedings of the ACM SIGPLAN Java Grande Conference&lt;/em>,
pages 160&amp;ndash;170. ACM, June 1999.&lt;/font>&lt;p>
We describe a native-code implementation of Java that supports distributed
objects. In order to foster the correctness of distributed programs, remote
access is syntactically and semantically indistinguishable from local
access. This transparency is provided by the runtime system through the
implicit generation of remote references to an object when it is passed as
an argument or returned from a remote method call. Consistency is achieved
through the use of a distributed (and thus scalable) global addressing
scheme. Experiments show that application performance is a function of data
layout, access algorithm, and local workload. For distributed applications,
such as distributed databases, these factors may not be known statically,
suggesting the importance of runtime support.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/HicksKMGN06.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/HicksKMGN06.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>PLAN: A Packet Language for Active Networks (Extended version)&lt;/b>.
Michael W. Hicks, Pankaj Kakkar, Jonathan T. Moore, Carl A. Gunter,
and Scott M. Nettles.
Unpublished manuscript. Consolidates ICFP 98, IPL 98, Allterton 99
papers, May 2006.&lt;/font>&lt;p>
The Internet protocols were designed to emphasize simple rout-
ing elements and intelligent hosts. However, there are applications
that benefit from allowing hosts to customize or program routers, a
concept known as active networking. Since routers are shared, this
raises challenges with delivering sufficient flexibility while preserving
or improving performance, security, and safety. PLAN (Packet Lan-
guage for Active Networks) is a language designed for the SwitchWare
active network architecture. This architecture comprises active pack-
ets containing PLAN programs that invoke service routines over an
active OS. PLAN is based on the polymorphic lambda calculus and
provides a restricted set of primitives and datatypes that enables rea-
soning about its impact on network resources based on features of the
language design. This paper focuses on the PLAN language with the
aim of consolidating a variety of studies that were carried out in the
years after its introduction in 1998. These studies include the require-
ments for PLAN, its design, programming in PLAN, the specification
and theory of PLAN, and its use in networking applications.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/HicksKS03.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/HicksKS03.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>A Secure PLAN&lt;/b>.
Michael Hicks, Angelos D. Keromytis, and Jonathan M. Smith.
&lt;em>IEEE Transactions on Systems, Man, and Cybernetics, Part C&lt;/em>,
33(3):413&amp;ndash;426, August 2003.
Special Issue on Technologies Promoting Computational Intelligence,
Openness and Programmability in Networks and Internet Services, Part I.&lt;/font>&lt;p>
Active Networks, being programmable,
promise greater flexibility than current networks.
Programmability, however, may
introduce safety and security risks.
This paper describes the design and implementation of a security
architecture for the active network PLANet.
Security is obtained with a two-level architecture that combines a
functionally restricted packet language, PLAN, with
an environment of general-purpose service routines governed by trust
management. In particular, a technique is used
which expands or contracts a packet&amp;rsquo;s service environment based on its
level of privilege, termed &lt;em>namespace-based security&lt;/em>.
The design and implementation of an active-network firewall and virtual
private network is used as an application of the security architecture.
Measurements of the system show that the addition of the firewall imposes an
approximately 34% latency overhead and as little as a 6.7% space overhead
to incoming packets.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/HicksMN01a.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/HicksMN01a.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Dynamic Software Updating&lt;/b>.
Michael Hicks, Jonathan T. Moore, and Scott Nettles.
In &lt;em>Proceedings of the ACM Conference on Programming Language
Design and Implementation (PLDI)&lt;/em>, pages 13&amp;ndash;23. ACM, June 2001.&lt;/font>&lt;p>
Many important applications must run continuously and without interruption,
yet must be changed to fix bugs or upgrade functionality. No
prior general-purpose methodology for dynamic updating achieves a practical
balance between flexibility, robustness, low overhead, and ease of use.&lt;p>
We present a new approach for C-like languages that provides type-safe
dynamic updating of native code in an extremely flexible manner (code, data,
and types may be updated, at programmer-determined times) and permits the
use of automated tools to aid the programmer in the updating process. Our
system is based on &lt;em>dynamic patches&lt;/em> that both contain the updated code
and the code needed to transition from the old version to the new. A novel
aspect of our patches is that they consist of &lt;em>verifiable native code&lt;/em>
(&lt;em>e.g.&lt;/em> Proof-Carrying Code or Typed Assembly
Language, which is native code accompanied by
annotations that allow on-line verification of the code&amp;rsquo;s safety. We
discuss how patches are generated mostly automatically, how they are applied
using dynamic-linking technology, and how code is compiled to make it
updateable.&lt;p>
To concretely illustrate our system, we have implemented a
dynamically-updateable web server, FlashEd. We discuss our experience
building and maintaining FlashEd. Performance experiments show that for
FlashEd, the overhead due to updating is typically less than 1 percent.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/HicksMN01b.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/HicksMN01b.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Compiling PLAN to SNAP&lt;/b>.
Michael Hicks, Jonathan T. Moore, and Scott Nettles.
In Ian W. Marshall, Scott Nettles, and Naoki Wakamiya, editors, &lt;em>
Proceedings of the Third International Working Conference on Active Networks
(IWAN)&lt;/em>, volume 2207 of &lt;em>Lecture Notes in Computer Science&lt;/em>, pages
134&amp;ndash;151. Springer-Verlag, October 2001.&lt;/font>&lt;p>
PLAN (Packet Language for Active Networks) is a highly flexible
and usable active packet language, whereas SNAP (Safe and Nimble
Active Packets) offers significant resource usage safety and
achieves much higher performance compared to PLAN, but at the cost
of flexibility and usability. Ideally, we would like to combine
the good properties of PLAN with those of SNAP. We have achieved
this end by developing a compiler that translates PLAN
into SNAP. The compiler allows us to achieve the
flexibility and usability of PLAN, but with the safety and
efficiency of SNAP. In this paper, we describe both languages,
highlighting the features that require special compilation
techniques. We then present the details of our compiler and
experimental results to evaluate our compiler with respect to code
size.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/HicksMNW02.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/HicksMNW02.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Experiences with Capsule-based Active Networking&lt;/b>.
Michael Hicks, Jonathan T. Moore, David Wetherall, and Scott Nettles.
In &lt;em>Proceedings of the DARPA Active Networks Conference and
Exposition (DANCE)&lt;/em>, pages 16&amp;ndash;24. IEEE, May 2002.&lt;/font>&lt;p>
Active Networking adds programmability to the elements
of the network, most aggressively by using programmable packets,
or &lt;em>capsules&lt;/em>. ANTS and
PLANet are the most mature examples of
capsule-based systems, both having been publicly available for
several years. This paper presents our experience with these
systems and the lessons they hold for the future of capsule-based
Active Networking.&lt;p>
The paper focuses on four key issues: flexibility, performance,
security, and usability. We consider how ANTS and PLANet address
these issues, noting that despite substantial surface differences,
both systems identify similar key problems and use closely related
solutions. Based on our experience with these systems we conclude
that capsule-based systems can achieve useful levels of
flexibility, performance, and usability. Many aspects of security
can also be adequately addressed, but some important problems
related to denial of service remain as open problems.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/HicksN00.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/HicksN00.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Active Networking means Evolution (or Enhanced Extensibility Required)&lt;/b>.
Michael Hicks and Scott Nettles.
In Hiroshi Yashuda, editor, &lt;em>Proceedings of the Second
International Working Conference on Active Networks (IWAN)&lt;/em>, volume 1942 of
&lt;em>Lecture Notes in Computer Science&lt;/em>, pages 16&amp;ndash;32. Springer-Verlag,
October 2000.&lt;/font>&lt;p>
The primary goal of active networking is to increase the pace of
network evolution. The approach to achieving this goal, as well
as the goal of enhancing customizability, is to allow network
nodes to be extended by dynamically loaded code. Most active
network implementations employ &lt;em>plug-in extensibility&lt;/em>, a
technique for loading code characterized by a concrete,
pre-defined abstraction of future change. After giving examples
of plug-in extensibility, we argue that while it is flexible and
convenient, it is not sufficient to facilitate true evolution of
the network. To remedy this problem, we propose the use of &lt;em>
dynamic software updating&lt;/em>. Dynamic software updating reduces the
&lt;em>a priori&lt;/em> assumptions of plug-in extensibility, improving
flexibility and eliminating the need to pre-plan extensions.
However, this additional flexibility results in additional
complexity and creates issues involving validity and security. We
discuss these issues, and describe the state-of-the-art in systems
that support dynamic software updating, thus framing the problem
for researchers developing next-generation active networks.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/HicksNvR03.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/HicksNvR03.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>User-Specified Adaptive Scheduling in a Streaming Media Network&lt;/b>.
Michael Hicks, Adithya Nagarajan, and Robbert van Renesse.
In &lt;em>Proceedings of the IEEE Conference on Open Architectures
(OPENARCH)&lt;/em>, pages 87&amp;ndash;96, April 2003.&lt;/font>&lt;p>
In disaster and combat situations, mobile cameras and other sensors
transmit real-time data, used by many operators or analysis tools.
Unfortunately, in the face of limited, unreliable resources, and varying
demands, not all users may be able to get the fidelity they require. This
paper describes &lt;em>MediaNet&lt;/em>, a distributed stream processing system
designed with the above scenarios in mind.
Unlike past approaches, MediaNet&amp;rsquo;s users can intuitively specify
how the system should adapt based on their
individual needs.
MediaNet uses both local and on-line global resource
scheduling to improve user performance and network utilization, and
adapts without requiring underlying support for
resource reservations. Performance experiments show that our scheduling
algorithm is reasonably fast, and that user performance and network
utilization are both significantly improved.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/HicksW00type-loading-tr.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/HicksW00type-loading-tr.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>A Calculus for Dynamic Loading&lt;/b>.
Michael Hicks and Stephanie Weirich.
Technical Report MS-CIS-00-07, University of Pennsylvania, April
2000.&lt;/font>&lt;p>&lt;p>[ &lt;a href="https://mhicks.me/papers/loadcalc.pdf">.pdf&lt;/a> ]
&lt;a name="HicksW00type-loading-tr">&lt;/a>&lt;pre>
@techreport{HicksW00type-loading-tr,
author = {Michael Hicks and Stephanie Weirich},
title = {A Calculus for Dynamic Loading},
institution = {University of Pennsylvania},
year = {2000},
number = {MS-CIS-00-07},
month = {April}
}
&lt;/pre>&lt;/p>
&lt;hr>&lt;p>&lt;em>This file was generated by
&lt;a href="http://www.lri.fr/~filliatr/bibtex2html/">bibtex2html&lt;/a> 1.99.&lt;/em>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hietala21expvoqc.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hietala21expvoqc.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Applying and Expanding the VOQC Toolkit&lt;/b>.
Kesha Hietala, Liyi Li, Akshaj Gaur, Aaron Green, Robert Rand, Xiaodi
Wu, and Michael Hicks.
In &lt;em>Informal Proceedings of the Workshop on Programming Languages
and Quantum Computing (PLanQC)&lt;/em>, June 2021.&lt;/font>&lt;p>
This abstract presents recent extensions to VOQC, a verified optimizer for quantum circuits. All code described in this abstract is freely available online at &lt;a href="https://github.com/inQWIRE/SQIR/">
&lt;a href="https://github.com/inQWIRE/SQIR/" target="_blank" rel="noopener">https://github.com/inQWIRE/SQIR/&lt;/a>&lt;/a>.&lt;/p>
 &lt;p>[&amp;nbsp;&lt;a href="https://mhicks.me/papers/VOQC_PLanQC_2021.pdf">.pdf&lt;/a>&amp;nbsp;]
&lt;a name="hietala21expvoqc">&lt;/a>&lt;pre>
@inproceedings{hietala21expvoqc,
 title = {Applying and Expanding the {VOQC} Toolkit},
 booktitle = {Informal Proceedings of the Workshop on Programming Languages and Quantum Computing (PLanQC)},
 author = {Kesha Hietala and Liyi Li and Akshaj Gaur and Aaron Green and Robert Rand and Xiaodi Wu and Michael Hicks},
 year = 2021,
 month = jun
}
&lt;/pre>
&lt;hr>&lt;p>&lt;em>This file was generated by
&lt;a href="http://www.lri.fr/~filliatr/bibtex2html/">bibtex2html&lt;/a> 1.99.&lt;/em>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hietala21voqc.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hietala21voqc.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>A Verified Optimizer for Quantum Circuits&lt;/b>.
Kesha Hietala, Robert Rand, Shih-Han Hung, Xiaodi Wu, and Michael
Hicks.
In &lt;em>Proceedings of the ACM Conference on Principles of
Programming Languages (POPL)&lt;/em>, January 2021.
&lt;b>Distinguished Paper&lt;/b>.&lt;/font>&lt;p>
We present VOQC, the first fully &lt;em>verified optimizer for quantum circuits&lt;/em>, written using the Coq proof assistant. Quantum circuits are expressed as programs in a simple, low-level language called SQIR, a &lt;em>simple quantum intermediate representation&lt;/em>, which is deeply embedded in Coq. Optimizations and other transformations are expressed as Coq functions, which are proved correct with respect to a semantics of SQIR programs.
SQIR uses a semantics of matrices of complex numbers, which is the standard for quantum computation, but treats matrices symbolically in order to reason about programs that use an arbitrary number of quantum bits.
SQIR&amp;rsquo;s careful design and our provided automation make it possible to write and verify a broad range of optimizations in VOQC,
including full-circuit transformations from cutting-edge optimizers.&lt;p>[ &lt;a href="https://mhicks.me/papers/voqc.pdf">.pdf&lt;/a> ]
&lt;a name="hietala21voqc">&lt;/a>&lt;pre>
@inproceedings{hietala21voqc,
author = {Kesha Hietala and Robert Rand and Shih-Han Hung and Xiaodi Wu and Michael Hicks},
title = {A Verified Optimizer for Quantum Circuits},
booktitle = {Proceedings of the {ACM} Conference on Principles of Programming Languages (POPL)},
month = jan,
note = {\textbf{Distinguished Paper}},
year = {2021}
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hietala22voqc-journal.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hietala22voqc-journal.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>A Verified Optimizer for Quantum Circuits&lt;/b>.
Kesha Hietala, Robert Rand, Liyi Li, Shih-Han Hung, Xiaodi Wu, and
Michael Hicks.
&lt;em>ACM Transactions on Programming Languages and Systems
(TOPLAS)&lt;/em>, 45(3), September 2023.
Extends POPL'21 paper.&lt;/font>&lt;p>
We present VOQC, the first fully &lt;em>verified optimizer for quantum circuits&lt;/em>, written using the Coq proof assistant. Quantum circuits are expressed as programs in a simple, low-level language called SQIR, a &lt;em>small quantum intermediate representation&lt;/em>, which is deeply embedded in Coq. Optimizations and other transformations are expressed as Coq functions, which are proved correct with respect to a semantics of SQIR programs.
SQIR programs denote complex-valued matrices, as is standard in quantum computation, but we treat matrices symbolically in order to reason about programs that use an arbitrary number of quantum bits.
SQIR&amp;rsquo;s careful design and our provided automation make it possible to write and verify a broad range of optimizations in VOQC,
including full-circuit transformations from cutting-edge optimizers.&lt;p>[ &lt;a href="https://mhicks.me/papers/voqc-journal.pdf">.pdf&lt;/a> ]
&lt;a name="hietala22voqc-journal">&lt;/a>&lt;pre>
@article{hietala22voqc-journal,
author = {Kesha Hietala and Robert Rand and Liyi Li and Shih-Han Hung and Xiaodi Wu and Michael Hicks},
title = {A Verified Optimizer for Quantum Circuits},
journal = {{ACM} Transactions on Programming Languages and Systems (TOPLAS)},
month = sep,
volume = 45,
number = 3,
note = {Extends POPL'21 paper},
year = {2023}
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hung19qrobust.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/hung19qrobust.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Quantitative Robustness Analysis of Quantum Programs&lt;/b>.
Shih-Han Hung, Kesha Hietala, Shaopeng Zhu, Mingsheng Ying, Michael
Hicks, and Xiaodi Wu.
In &lt;em>Proceedings of the ACM Conference on Principles of
Programming Languages (POPL)&lt;/em>, January 2019.&lt;/font>&lt;p>
Quantum computation is a topic of significant recent interest, with
practical advances coming from both research and
industry. A major challenge in
quantum programming is dealing with errors (quantum noise) during
execution. Because quantum resources (e.g., qubits) are scarce,
classical error correction techniques applied at the level of the
architecture are currently cost-prohibitive. But while this reality means
that quantum programs are almost certain to have errors, there as yet
exists no principled means to reason about erroneous behavior.
This paper attempts to fill this gap by developing a semantics for
erroneous quantum while-programs, as well as a logic for reasoning
about them. This logic permits proving a property we have
identified, called ε-robustness, which characterizes
possible “distance” between an ideal program and an erroneous one. We
have proved the logic sound, and showed its utility on several case
studies, notably: (1) analyzing the robustness of noisy versions of the
quantum Bernoulli factory (QBF) and quantum walk (QW); (2) demonstrating
the (in)effectiveness of different error correction schemes on
single-qubit errors; and (3) analyzing the robustness of a
fault-tolerant version of QBF.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/jim07beep.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/jim07beep.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Defeating Scripting Attacks with Browser-Enforced Embedded Policies&lt;/b>.
Trevor Jim, Nikhil Swamy, and Michael Hicks.
In &lt;em>Proceedings of the International World Wide Web Conference
(WWW)&lt;/em>, pages 601&amp;ndash;610, May 2007.&lt;/font>&lt;p>
Web sites that accept and display content such as wiki articles or
comments typically filter the content to prevent injected script
code from running in browsers that view the site. The diversity of
browser rendering algorithms and the desire to allow rich content
make filtering quite difficult, however, and attacks such as the
Samy and Yamanner worms have exploited filtering weaknesses. This
paper proposes a simple alternative mechanism for preventing script
injection called Browser-Enforced Embedded Policies (BEEP). The idea is that a
web site can embed a policy in its pages that specifies which
scripts are allowed to run. The browser, which knows exactly when
it will run a script, can enforce this policy perfectly. We have
added BEEP support to several browsers, and built tools to
simplify adding policies to web applications. We found that
supporting BEEP in browsers requires only small and localized
modifications, modifying web applications requires minimal effort,
and enforcing policies is generally lightweight.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/khoo08pathproj.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/khoo08pathproj.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Path Projection for User-Centered Static Analysis Tools&lt;/b>.
Yit Phang Khoo, Jeffrey S. Foster, Michael Hicks, and Vibha Sazawal.
In &lt;em>Proceedings of the ACM Workshop on Program Analysis for
Software Tools and Engineering (PASTE)&lt;/em>, pages 57&amp;ndash;63, November 2008.&lt;/font>&lt;p>
The research and industrial communities have made
great strides in developing sophisticated defect detection tools
based on static analysis. To date most of the work in this
area has focused on developing novel static analysis
&lt;em>algorithms&lt;/em>, but has neglected study of other aspects of static
analysis &lt;em>tools&lt;/em>, particularly user interfaces. In this work,
we present a novel user interface toolkit called Path Projection
that helps users visualize, navigate, and understand program paths,
a common component of many tools&amp;rsquo; error reports.
We performed a controlled user study to measure the benefit of Path
Projection in triaging error reports from Locksmith, a data race
detection tool for C . We found that Path Projection improved
participants&amp;rsquo; time to complete this task without affecting
accuracy, while participants felt Path Projection was useful and
strongly preferred it to a more standard viewer.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/khoo09arrowlets.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/khoo09arrowlets.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Directing JavaScript with Arrows&lt;/b>.
Yit Phang Khoo, Michael Hicks, Jeffrey S. Foster, and Vibha Sazawal.
In &lt;em>Proceedings of the ACM SIGPLAN Dynamic Languages
Symposium (DLS)&lt;/em>, pages 49&amp;ndash;58, October 2009.&lt;/font>&lt;p>
JavaScript programmers make extensive use of event-driven
programming to help build responsive web applications. However,
standard approaches to sequencing events are messy, and often lead
to code that is difficult to understand and maintain. We have found
that &lt;em>arrows&lt;/em>, a generalization of &lt;em>monads&lt;/em>, are an
elegant solution to this problem. Arrows allow us to easily write
asynchronous programs in small, modular units of code, and flexibly
compose them in many different ways, while nicely abstracting the
details of asynchronous program composition. In this paper, we
present Arrowlets, a new JavaScript library that offers arrows to
the everyday JavaScript programmer. We show how to use Arrowlets to
construct a variety of state machines, including state machines that
branch and loop. We also demonstrate how Arrowlets separate
computation from composition with examples such as a drag-and-drop
handler and a bubblesort animation.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/khoo09checklist.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/khoo09checklist.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Triaging Checklists: a Substitute for a PhD in Static Analysis&lt;/b>.
Yit Phang Khoo, Jeffrey S. Foster, Michael Hicks, and Vibha Sazawal.
In &lt;em>Proceedings of the Workshop on the Evaluation and Usability
of Programming Languages and Tools (PLATEAU)&lt;/em>, October 2009.&lt;/font>&lt;p>
Static analysis tools have achieved great success in recent years in automating the process of
detecting defects in software. However, these sophisticated tools have yet to gain widespread
adoption, since many of these tools remain too difficult to understand and use. In
previous work, we discovered that even with an effective code visualization tool, users still found
it hard to determine if warnings reported by these tools were true errors or false warnings.
The fundamental problem users face is to understand enough of the underlying algorithm to determine
if a warning is caused by imprecision in the algorithm. In our current work, we propose to use
&lt;em>triaging checklists&lt;/em> to provide users with systematic guidance to identify false warnings by
taking into account specific sources of imprecision in the particular tool. Additionally, we plan to
provide &lt;em>checklist assistants&lt;/em>, which is a library of simple analyses designed to aid users in
answering checklist questions.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/khoo13expositor-journal.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/khoo13expositor-journal.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Expositor: Scriptable Time-Travel Debugging with First Class Traces (Full
version)&lt;/b>.
Yit Phang Khoo, Jeffrey S. Foster, and Michael Hicks, December 2013.
Extended version of ICSE'13 paper.&lt;/font>&lt;p>
We present Expositor, a new debugging environment that combines
scripting and time-travel debugging to allow programmers to automate
complex debugging tasks. The fundamental abstraction provided by
Expositor is the &lt;em>execution trace&lt;/em>, which is a time-indexed
sequence of program state snapshots or projections thereof.
Programmers can manipulate traces as if they were simple
lists with operations such as map and filter. Under the hood,
Expositor efficiently implements traces as lazy, sparse
interval trees whose contents are materialized on demand.
Expositor also provides a novel data
structure, the &lt;em>edit hash array mapped trie&lt;/em>, which is a lazy
implementation of sets, maps, multisets, and multimaps that enables
programmers to maximize the efficiency of their debugging scripts.
In our micro-benchmarks, Expositor scripts are faster than
the equivalent non-lazy scripts for common debugging scenarios. We have also used
Expositor to debug a stack overflow, and to unravel a subtle
data race in Firefox. We believe that
Expositor represents an important step forward in improving the
technology for diagnosing complex, hard-to-understand bugs.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/khoo13expositor.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/khoo13expositor.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Expositor: Scriptable Time-Travel Debugging with First Class Traces&lt;/b>.
Yit Phang Khoo, Jeffrey S. Foster, and Michael Hicks.
In &lt;em>Proceedings of the International Conference on Software
Engineering (ICSE)&lt;/em>, May 2013.&lt;/font>&lt;p>
We present Expositor, a new debugging environment that combines
scripting and time-travel debugging to allow programmers to automate
complex debugging tasks. The fundamental abstraction provided by
Expositor is the execution &lt;em>trace&lt;/em>, which is a time-indexed
sequence of program state snapshots. Programmers can manipulate traces as if they were simple
lists with operations such as map and filter. Under the hood,
Expositor efficiently implements traces as lazy, sparse
interval trees whose contents are materialized on demand.
Expositor also provides a novel data
structure, the &lt;em>edit hash array mapped trie&lt;/em>, which is a lazy
implementation of sets, maps, multisets, and multimaps that enables
programmers to maximize the efficiency of their debugging scripts. We have used
Expositor to debug a stack overflow and to unravel a subtle
data race in Firefox. We believe that
Expositor represents an important step forward in improving the
technology for diagnosing complex, hard-to-understand bugs.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/king08implicit.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/king08implicit.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Implicit Flows: Can&amp;rsquo;t live with &amp;rsquo;em, can&amp;rsquo;t live without &amp;rsquo;em&lt;/b>.
Dave King, Boniface Hicks, Michael Hicks, and Trent Jaeger.
In R. Sekar and Arun K. Pujari, editors, &lt;em>Proceedings of the
International Conference on Information Systems Security (ICISS)&lt;/em>, volume
5352 of &lt;em>Lecture Notes in Computer Science&lt;/em>, pages 56&amp;ndash;70. Springer,
December 2008.&lt;/font>&lt;p>
Verifying that programs trusted to enforce security actually do so is
a practical concern for programmers and administrators. However, there is a
disconnect between the kinds of tools that have been successfully applied to real
software systems (such as taint mode in Perl and Ruby), and information-flow
compilers that enforce a variant of the stronger security property of
noninterference. Tools that have been successfully used to find security
violations have focused on &lt;i>explicit flows&lt;/i> of information, where
high-security information is directly leaked to output. Analysis tools that
enforce noninterference also prevent &lt;i>implicit flows&lt;/i> of
information, where high-security information can be inferred from a program&amp;rsquo;s
flow of control. However, these tools have seen little use in
practice, despite the stronger guarantees that they provide. &lt;p>
To better understand why, this paper experimentally investigates
the explicit and implicit flows identified by the standard
algorithm for establishing noninterference. When applied to
implementations of authentication and cryptographic functions, the
standard algorithm discovers many real implicit flows of
information, but also reports an extremely high number of false alarms,
most of which are due to conservative handling of unchecked
exceptions (e.g., null pointer exceptions). After a careful
analysis of all sources of
true and false alarms, due to both implicit and explicit flows, the
paper concludes with some ideas to improve the false alarm rate,
toward making stronger security analysis more practical.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/lampropoulos19fuzzchick.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/lampropoulos19fuzzchick.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Coverage Guided, Property Based Testing&lt;/b>.
Leonidas Lampropoulos, Michael Hicks, and Benjamin C. Pierce.
In &lt;em>Proceedings of the ACM Conference on Object-Oriented
Programming Languages, Systems, and Applications (OOPSLA)&lt;/em>, October 2019.&lt;/font>&lt;p>
Property-based random testing, exemplified by frameworks such as
Haskell&amp;rsquo;s QuickCheck, works by testing an executable predicate (a
&lt;em>property&lt;/em>) on a stream of randomly generated inputs.
Property testing works very well in many cases, but not always.
Some properties are conditioned on the input satisfying demanding
semantic invariants that are not consequences of its
syntactic structure&amp;mdash;e.g., that an input list must be sorted or have no
duplicates.
Most randomly generated inputs fail to satisfy properties with such
&lt;em>sparse preconditions&lt;/em>, and so are simply discarded.
As a result, much of the target system may go untested.&lt;p>
We address this issue with a novel technique
called &lt;em>coverage guided, property based testing (CGPT)&lt;/em>. Our
approach is inspired by the related area of coverage guided fuzzing,
exemplified by tools like AFL .
Rather than just generating a fresh random input at each iteration, CGPT
can also produce new inputs by mutating previous ones using type-aware,
generic mutation operators.
The target program is instrumented to track which control flow
branches are executed during a run and
inputs whose runs expand control-flow coverage are retained for
future mutations.
This means that, when sparse conditions in the target are satisfied and new
coverage is observed, the input that triggered them will be retained
and used as a springboard to go further.&lt;p>
We have implemented CGPT as an extension to the QuickChick property testing
tool for Coq programs; we call our implementation FuzzChick.
We evaluate FuzzChick on two Coq developments for abstract machines
that aim to enforce flavors of noninterference, which has a (very)
sparse precondition.
We systematically inject bugs in the machines&amp;rsquo; checking rules and use
FuzzChick to look for counterexamples to the claim that they satisfy a standard
noninterference property.
We find that vanilla QuickChick almost always fails to find any bugs
after a long period of time, as does an earlier proposal for combining
property testing and fuzzing. In contrast, FuzzChick often finds them
within seconds to minutes.
Moreover, FuzzChick is almost fully automatic; although highly
tuned, hand-written generators can find the bugs faster than
FuzzChick, they require substantial amounts of insight and manual
effort.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/liu13oblivious.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/liu13oblivious.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Memory Trace Oblivious Program Execution&lt;/b>.
Chang Liu, Michael Hicks, and Elaine Shi.
In &lt;em>Proceedings of the Computer Security Foundations Symposium
(CSF)&lt;/em>, June 2013.
Winner of the 2nd NSA &lt;b>Best Scientific Cybersecurity Paper&lt;/b>
competition.&lt;/font>&lt;p>
Cloud computing allows users to delegate data and computation to
cloud service providers, at the cost of giving up physical control
of their computing infrastructure. An attacker (e.g., insider) with
physical access to the computing platform can perform various
physical attacks, including probing memory buses and cold-boot style
attacks. Previous work on secure (co-)processors provides hardware
support for memory encryption and prevents direct leakage of
sensitive data over the memory bus. However, an adversary snooping
on the bus can still infer sensitive information from the memory
access traces. Existing work on Oblivious RAM (ORAM) provides a
solution for users to put all data in an ORAM; and accesses to an
ORAM are obfuscated such that no information leaks through memory
access traces. This method, however, incurs significant memory
access overhead.&lt;p>
In this work, we are among the first to leverage programming
language techniques to offer efficient memory-trace oblivious
program execution, while providing formal security guarantees. We
formally define the notion of memory-trace obliviousness, and
provide a type system for verifying that a program satisfies this
property. We also describe a compiler that transforms a program
into a structurally similar one that satisfies memory trace
obliviousness. To achieve optimal efficiency, our compiler
partitions variables into several small ORAM banks rather than one
large one, without risking security. We use several example
programs to demonstrate the efficiency gains our compiler achieves
in comparison with the naive method of placing all variables in the
same ORAM.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/liu14scram.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/liu14scram.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Automating Efficient RAM-Model Secure Computation&lt;/b>.
Chang Liu, Yan Huang, Elaine Shi, Jonathan Katz, and Michael Hicks.
In &lt;em>Proceedings of the IEEE Symposium on Security and Privacy
(Oakland)&lt;/em>, May 2014.&lt;/font>&lt;p>
RAM-model secure computation addresses the inherent limitations
of circuit-model secure computation considered in almost all previous work.
Here, we describe the first &lt;em>automated&lt;/em> approach for
RAM-model secure computation in the semi-honest model.
We define an intermediate representation
called SCVM and a corresponding type system suited for RAM-model secure computation.
Leveraging compile-time optimizations, our approach achieves
order-of-magnitude speedups compared to both circuit-model secure
computation and the state-of-art RAM-model secure computation.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/liu15ghostrider.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/liu15ghostrider.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>GhostRider: A Hardware-Software System for Memory Trace Oblivious
Computation&lt;/b>.
Chang Liu, Austin Harris, Martin Maas, Michael Hicks, Mohit Tiwari,
and Elaine Shi.
In &lt;em>Proceedings of the International Conference on Architectural
Support for Programming Languages and Operating Systems (ASPLOS)&lt;/em>, March
2015.
&lt;b>Winner of Best Paper Award&lt;/b>.&lt;/font>&lt;p>
This paper presents a new, co-designed compiler and architecture
called GhostRider for supporting privacy preserving computation in the
cloud. GhostRider ensures all programs satisfy a property called
memory-trace obliviousness (MTO): Even an adversary that observes
memory, bus traffic, and access times while the program executes can
learn nothing about the program&amp;rsquo;s sensitive inputs and outputs. One
way to achieve MTO is employ Oblivious RAM (ORAM), allocating all code
and data in a single ORAM bank, and to also disable caches or fix the
rate of memory traffic. This baseline approach can be inefficient, and
so GhostRider&amp;rsquo;s compiler uses a program analysis to do better,
allocating data to non-oblivious, encrypted RAM (ERAM) and employing a
scratchpad when doing so will not compromise MTO . The compiler can
also allocate to multiple ORAM banks, which sometimes significantly
reduces access times. We have formalized our approach and proved it
enjoys MTO . Our FPGA-based hardware prototype and simulation results
show that GhostRider significantly outperforms the baseline strategy.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/liu20typeclasses.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/liu20typeclasses.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Verifying Replicated Data Types with Typeclass Refinements in Liquid
Haskell&lt;/b>.
Yiyun Liu, James Parker, Patrick Redmond, Lindsey Kuper, Michael
Hicks, and Niki Vazou.
In &lt;em>Proceedings of the ACM Conference on Object-Oriented
Programming Languages, Systems, and Applications (OOPSLA)&lt;/em>, October 2020.&lt;/font>&lt;p>
This paper presents an extension to Liquid Haskell that facilitates stating and semi-automatically proving properties of typeclasses. Liquid Haskell augments Haskell with &lt;em>refinement types&lt;/em>&amp;mdash;our work allows such types to be attached to typeclass method declarations, and ensures that instance implementations respect these types. The engineering of this extension is a modular interaction between GHC, the Glasgow Haskell Compiler, and Liquid Haskell&amp;rsquo;s core proof infrastructure. The design sheds light on the interplay between modular proofs and typeclass resolution, which in Haskell is coherent by default, but in other dependently typed languages is not.&lt;p>
We demonstrate the utility of our extension by using Liquid Haskell to modularly verify that 34 instances satisfy the laws of five standard typeclasses. More substantially, we implement a framework for programming distributed applications based on &lt;em>conflict-free replicated data types&lt;/em> (CRDTs). We define a typeclass whose Liquid Haskell type captures the mathematical properties CRDTs should satisfy; prove in Liquid Haskell that these properties are sufficient to ensure that replicas&amp;rsquo; states converge despite out-of-order update delivery; implement (and prove correct) several instances of our CRDT typeclass; and use them to build two realistic applications, a multi-user calendar event planner and a collaborative text editor.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/ma11directed.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/ma11directed.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Directed Symbolic Execution&lt;/b>.
Kin-Keung Ma, Yit Phang Khoo, Jeffrey S. Foster, and Michael Hicks.
In Eran Yahav, editor, &lt;em>Proceedings of the Static Analysis
Symposium (SAS)&lt;/em>, volume 6887 of &lt;em>Lecture Notes in Computer Science&lt;/em>,
pages 95&amp;ndash;111. Springer, September 2011.&lt;/font>&lt;p>
In this paper, we study the problem of automatically finding program
executions that reach a particular target line. This problem arises
in many debugging scenarios; for example, a developer may want to confirm
that a bug reported by a static analysis tool on a particular line is
a true positive.
We propose two new &lt;em>directed&lt;/em>
symbolic execution strategies that aim to solve this problem:
&lt;em>shortest-distance symbolic execution (SDSE)&lt;/em> uses a distance metric in
an interprocedural control flow graph to guide symbolic execution toward a
particular target; and &lt;em>call-chain-backward symbolic execution (CCBSE)&lt;/em>
iteratively runs forward symbolic execution, starting in the function
containing the target line, and then jumping backward up the call chain
until it finds a feasible path from the start of the program.
We also propose a hybrid strategy, Mix-CCBSE, which alternates CCBSE with
another (forward) search strategy. We compare these three with several
existing strategies from the literature on a suite of six GNU
coreutils programs.
We find that SDSE performs extremely well in many cases
but may fail badly. CCBSE also performs quite well, but imposes
additional overhead that sometimes makes it slower than SDSE. Considering
all our benchmarks together, Mix-CCBSE performed best on average,
combining to good effect the features of its constituent components.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/ma11directedTR.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/ma11directedTR.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Directed Symbolic Execution&lt;/b>.
Kin-Keung Ma, Yit Phang Khoo, Jeffrey S. Foster, and Michael Hicks.
Technical Report CS-TR-4979, University of Maryland Department of
Computer Science, April 2011.
Extended version contains refinements and further experimental
analysis.&lt;/font>&lt;p>
In this paper, we study the problem of automatically finding program
executions that reach a particular target line. This problem arises
in many debugging scenarios; for example, a developer may want to confirm
that a bug reported by a static analysis tool on a particular line is
a true positive.
We propose two new &lt;em>directed&lt;/em>
symbolic execution strategies that aim to solve this problem:
&lt;em>shortest-distance symbolic execution (SDSE)&lt;/em> uses a distance metric in
an interprocedural control flow graph to guide symbolic execution toward a
particular target; and &lt;em>call-chain-backward symbolic execution (CCBSE)&lt;/em>
iteratively runs forward symbolic execution, starting in the function
containing the target line, and then jumping backward up the call chain
until it finds a feasible path from the start of the program.
We also propose a hybrid strategy, Mix-CCBSE, which alternates CCBSE with
another (forward) search strategy. We compare these three with several
existing strategies from the literature on a suite of six GNU
coreutils programs.
We find that SDSE performs extremely well in many cases
but may fail badly. CCBSE also performs quite well, but imposes
additional overhead that sometimes makes it slower than SDSE. Considering
all our benchmarks together, Mix-CCBSE performed best on average,
combining to good effect the features of its constituent components.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/magill12tos.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/magill12tos.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Automating Object Transformations for Dynamic Software Updating&lt;/b>.
Stephen Magill, Michael Hicks, Suriya Subramanian, and Kathryn S.
McKinley.
In &lt;em>Proceedings of the ACM Conference on Object-Oriented
Programming Languages, Systems, and Applications (OOPSLA)&lt;/em>, October 2012.&lt;/font>&lt;p>
Dynamic software updating (DSU) systems eliminate costly downtime by
dynamically fixing bugs and adding features to executing programs.
Given a static &lt;em>code&lt;/em> patch, most DSU systems construct runtime
code changes automatically. However, a dynamic update must also
specify how to change the running program&amp;rsquo;s execution &lt;em>state&lt;/em>,
e.g., the stack and heap, to make it compatible with the new code.
Constructing such &lt;em>state transformations&lt;/em> correctly and
automatically remains an open problem. This paper presents a
solution called &lt;em>Targeted Object Synthesis&lt;/em> (TOS). TOS first executes the same tests on
the old and new program versions separately, observing the program
heap state at a few corresponding points. Given two corresponding
heap states, TOS
&lt;em>matches&lt;/em> objects in the two versions using &lt;em>key&lt;/em> fields
that uniquely identify objects and correlate old and new-version
objects. Given example object pairs, TOS then &lt;em>synthesizes&lt;/em> the simplest-possible
function that transforms an old-version object to its new-version
counterpart. We show
that TOS is effective on updates to four open-source server
programs for which it generates non-trivial transformation functions that use conditionals,
operate on collections, and fix memory leaks. These transformations help programmers
understand their changes and apply dynamic software updates.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/mardziel10acita.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/mardziel10acita.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Secure sharing in distributed information management applications:
problems and directions&lt;/b>.
Piotr Mardziel, Adam Bender, Michael Hicks, Dave Levin, Mudhakar
Srivatsa, and Jonathan Katz.
In &lt;em>Proceedings of the Annual Conference of the International
Technology Alliance (ACITA)&lt;/em>, September 2010.&lt;/font>&lt;p>
Interaction between entities who may not trust each other is now
commonplace on the Internet.
This paper focuses on the specific problem of sharing information
between distrusting parties.
Previous work in this area shows that &lt;i>privacy&lt;/i> and &lt;i>utility&lt;/i>
can co-exist, but often do not provide strong assurances of one or the other.
In this paper, we sketch a research agenda with several directions for
attacking these problems, considering several alternative systems that
examine the privacy vs. utility problem from different angles.
We consider new mechanisms such as economic incentives to share data
or discourage
data leakage and a hybrid of code-splitting and secure multi-party
computation to provide various assurances of secrecy.
We discuss how to incorporate these mechanisms into practical applications,
including online social networks, a recommendation system based on users'
qualifications rather than identities, and a &lt;em>personal information
broker&lt;/em> that monitors data leakage over time.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/mardziel11belief.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/mardziel11belief.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Dynamic Enforcement of Knowledge-based Security Policies&lt;/b>.
Piotr Mardziel, Stephen Magill, Michael Hicks, and Mudhakar Srivatsa.
In &lt;em>Proceedings of the Computer Security Foundations Symposium
(CSF)&lt;/em>, pages 114&amp;ndash;128, June 2011.&lt;/font>&lt;p>
This paper explores the idea of &lt;em>knowledge-based security
policies&lt;/em>, which are used to decide whether to answer queries over
secret data based on an estimation of the querier&amp;rsquo;s (possibly
increased) knowledge given the results. Limiting knowledge is the
goal of existing information release policies that employ mechanisms
such as noising, anonymization, and redaction. Knowledge-based
policies are more general: they increase flexibility by not fixing
the means to restrict information flow. We enforce a
knowledge-based policy by explicitly tracking a model of a querier&amp;rsquo;s
belief about secret data, represented as a probability distribution,
and denying any query that could increase knowledge above a given
threshold. We implement query analysis and belief tracking via
abstract interpretation using a novel
&lt;em>probabilistic polyhedral&lt;/em> domain, whose design permits trading off
precision with performance while ensuring estimates of a querier&amp;rsquo;s
knowledge are sound. Experiments with our implementation show that
several useful queries can be handled efficiently, and performance
scales far better than would more standard implementations of
probabilistic computation based on sampling.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/mardziel11beliefTR.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/mardziel11beliefTR.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Dynamic Enforcement of Knowledge-based Security Policies&lt;/b>.
Piotr Mardziel, Stephen Magill, Michael Hicks, and Mudhakar Srivatsa.
Technical Report CS-TR-4978, University of Maryland Department of
Computer Science, July 2011.
Extended version with proofs and additional benchmarks.&lt;/font>&lt;p>
This paper explores the idea of &lt;em>knowledge-based security
policies&lt;/em>, which are used to decide whether to answer queries over
secret data based on an estimation of the querier&amp;rsquo;s (possibly
increased) knowledge given the results. Limiting knowledge is the
goal of existing information release policies that employ mechanisms
such as noising, anonymization, and redaction. Knowledge-based
policies are more general: they increase flexibility by not fixing
the means to restrict information flow. We enforce a
knowledge-based policy by explicitly tracking a model of a querier&amp;rsquo;s
belief about secret data, represented as a probability distribution,
and denying any query that could increase knowledge above a given
threshold. We implement query analysis and belief tracking via
abstract interpretation using a novel
&lt;em>probabilistic polyhedral&lt;/em> domain, whose design permits trading off
precision with performance while ensuring estimates of a querier&amp;rsquo;s
knowledge are sound. Experiments with our implementation show that
several useful queries can be handled efficiently, and performance
scales far better than would more standard implementations of
probabilistic computation based on sampling.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/mardziel12smc.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/mardziel12smc.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Knowledge-Oriented Secure Multiparty Computation&lt;/b>.
Piotr Mardziel, Michael Hicks, Jonathan Katz, and Mudhakar Srivatsa.
In &lt;em>Proceedings of the ACM SIGPLAN Workshop on Programming
Languages and Analysis for Security (PLAS)&lt;/em>, June 2012.&lt;/font>&lt;p>
Protocols for &lt;em>secure multiparty computation&lt;/em> (SMC) allow a set
of mutually distrusting parties to compute a function &lt;em>f&lt;/em> of their
private inputs while revealing nothing about their inputs beyond what
is implied by the result. Depending on &lt;em>f&lt;/em>, however, the result
itself may reveal more information than parties are comfortable with.
Almost all previous work on SMC treats &lt;em>f&lt;/em> as given. Left unanswered
is the question of how parties should decide whether it is “safe”
for them to compute &lt;em>f&lt;/em> in the first place.&lt;p>
We propose here a way to apply &lt;em>belief tracking&lt;/em> to SMC in order
to address exactly this question. In our approach, each participating
party is able to reason about the increase in knowledge that other
parties could gain as a result of computing &lt;em>f&lt;/em>, and may choose not to
participate (or participate only partially) so as to restrict that
gain in knowledge. We develop two techniques&amp;mdash;the &lt;em>belief set&lt;/em>
method and the &lt;em>SMC belief tracking&lt;/em> method&amp;mdash;prove them sound,
and discuss their precision/performance tradeoffs using a series of
experiments.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/mardziel13belief.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/mardziel13belief.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Knowledge inference for optimizing and enforcing secure computations&lt;/b>.
Piotr Mardziel, Michael Hicks, Jonathan Katz, Matthew Hammer, Aseem
Rastogi, and Mudhakar Srivatsa.
In &lt;em>Proceedings of the Annual Meeting of the US/UK International
Technology Alliance&lt;/em>, September 2013.
This short paper consists of coherent excerpts from several prior
papers.&lt;/font>&lt;p>
We present several techniques that aim to compute
the belief or knowledge a party might have about the values of hidden variables involved in the computation. These techniques can be used for enforcing knowledge-based security policies and for optimizing secure multiparty computations.&lt;p>[ &lt;a href="https://mhicks.me/papers/knowledge-overview.pdf">.pdf&lt;/a> ]
&lt;a name="mardziel13belief">&lt;/a>&lt;pre>
@inproceedings{mardziel13belief,
author = {Piotr Mardziel and Michael Hicks and Jonathan Katz and Matthew Hammer and Aseem Rastogi and Mudhakar Srivatsa},
title = {Knowledge inference for optimizing and enforcing secure computations},
booktitle = {Proceedings of the Annual Meeting of the US/UK International Technology Alliance},
note = {This short paper consists of coherent excerpts from several prior papers},
year = 2013,
month = sep
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/mardziel13belieflong.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/mardziel13belieflong.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Dynamic Enforcement of Knowledge-based Security Policies using
Probabilistic Abstract Interpretation&lt;/b>.
Piotr Mardziel, Stephen Magill, Michael Hicks, and Mudhakar Srivatsa.
&lt;em>Journal of Computer Security&lt;/em>, 21:463&amp;ndash;532, October 2013.&lt;/font>&lt;p>
This paper explores the idea of &lt;em>knowledge-based security
policies&lt;/em>, which are used to decide whether to answer queries over
secret data based on an estimation of the querier&amp;rsquo;s (possibly
increased) knowledge given the results. Limiting knowledge is the
goal of existing information release policies that employ
mechanisms such as noising, anonymization, and redaction.
Knowledge-based policies are more general: they increase
flexibility by not fixing the means to restrict information flow.
We enforce a knowledge-based policy by explicitly tracking a model
of a querier&amp;rsquo;s belief about secret data, represented as a
probability distribution, and denying any query that could
increase knowledge above a given threshold. We implement query
analysis and belief tracking via abstract interpretation, which allows us to
trade off precision and performance through the use of
abstraction. We have developed an approach to augment standard
abstract domains to include probabilities, and thus define
distributions. We focus on developing &lt;em>probabilistic
polyhedra&lt;/em> in particular, to support numeric programs. While
probabilistic abstract interpretation has been
considered before, our domain is the first whose design supports
sound conditioning, which is required to ensure that estimates of
a querier&amp;rsquo;s knowledge are accurate. Experiments with our
implementation show that several useful queries can be handled
efficiently, particularly compared to exact (i.e., sound)
inference involving sampling. We also show that, for our
benchmarks, restricting constraints to &lt;em>octagons&lt;/em>
or &lt;em>intervals&lt;/em>, rather than full polyhedra, can dramatically
improve performance while incurring little to no loss in
precision.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/mardziel14qifgl.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/mardziel14qifgl.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Adversary Gain vs. Defender Loss in Quantified Information Flow&lt;/b>.
Piotr Mardziel, Mário S. Alvim, and Michael Hicks.
In &lt;em>(Unofficial) Proceedings of the International Workshop on
Foundations of Computer Security (FCS)&lt;/em>, July 2014.&lt;/font>&lt;p>
Metrics for quantifying information leakage assume
that an adversary&amp;rsquo;s gain is the defender&amp;rsquo;s loss.
We demonstrate that this assumption does not always hold via a class
of scenarios.
We describe how to extend quantification to account for a defender
with goals distinct from adversary failure.
We implement the extension and experimentally explore the impact on
the measured information leakage of the motivating scenario.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/mardziel14time.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/mardziel14time.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Quantifying Information Flow for Dynamic Secrets&lt;/b>.
Piotr Mardziel, Mario Alvim, Michael Hicks, and Michael Clarkson.
In &lt;em>Proceedings of the IEEE Symposium on Security and Privacy
(Oakland)&lt;/em>, May 2014.&lt;/font>&lt;p>
A metric is proposed for quantifying leakage of information about
secrets and about how secrets change over time.
The metric is used with a model of information flow for
probabilistic, interactive systems with adaptive adversaries.
The model and metric are implemented in a probabilistic programming
language and used to analyze several examples.
The analysis demonstrates that adaptivity increases the amount of
information that adversaries learn.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/mardziel14timeTR.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/mardziel14timeTR.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Quantifying Information Flow for Dynamic Secrets (extended version)&lt;/b>.
Piotr Mardziel, Mario Alvim, Michael Hicks, and Michael Clarkson.
Technical Report CS-TR-5035, Department of Computer Science, the
University of Maryland, College Park, May 2014.&lt;/font>&lt;p>
A metric is proposed for quantifying leakage of information about
secrets and about how secrets change over time.
The metric is used with a model of information flow for
probabilistic, interactive systems with adaptive adversaries.
The model and metric are implemented in a probabilistic programming
language and used to analyze several examples.
The analysis demonstrates that adaptivity increases the amount of
information that adversaries learn.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/martin10ownership.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/martin10ownership.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Dynamically Checking Ownership Policies in Concurrent C/C++ Programs&lt;/b>.
Jean-Philippe Martin, Michael Hicks, Manuel Costa, Periklis
Akritidis, and Miguel Castro.
In &lt;em>Proceedings of the ACM Conference on Principles of
Programming Languages (POPL)&lt;/em>, pages 457&amp;ndash;470, January 2010.
Full version.&lt;/font>&lt;p>
Concurrent programming errors arise when threads share data
incorrectly. Programmers often avoid these errors by using
synchronization to enforce a simple ownership policy: data is either
&lt;em>owned exclusively&lt;/em> by a thread that can read or write the data,
or it is &lt;em>read owned&lt;/em> by a set of threads that can read but
not write the data. Unfortunately, incorrect synchronization often
fails to enforce these policies and memory errors in languages like C
and C++ can violate these policies even when synchronization is
correct.&lt;p>
In this paper, we present a dynamic analysis for checking ownership
policies in concurrent C and C++ programs despite memory errors. The
analysis can be used to find errors in commodity multi-threaded
programs and to prevent attacks that exploit these errors. We require
programmers to write ownership assertions that describe the sharing
policies used by different parts of the program. These policies may
change over time, as may the policies&amp;rsquo; means of enforcement, whether
it be locks, barriers, thread joins, etc. Our compiler inserts checks
in the program that signal an error if these policies are violated at
runtime. We evaluated our tool on several benchmark programs. The
run-time overhead was reasonable: between 0 and 49% with an average
of 26%. We also found the tool easy to use: the total number of
ownership assertions is small, and the asserted specification and
implementation can be debugged together by running the instrumented
program and addressing the errors that arise. Our approach enjoys a
pleasing modular soundness property: if a thread executes a sequence
of statements on variables it owns, the statements are serializable
within a valid execution, and thus their effects can be reasoned about
in isolation from other threads in the program.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/meister10cir.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/meister10cir.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Serializing C intermediate representations for efficient and portable
parsing&lt;/b>.
Jeffrey A. Meister, Jeffrey S. Foster, and Michael Hicks.
&lt;em>Software, Practice, and Experience&lt;/em>, 40(3):225&amp;ndash;238, February
2010.&lt;/font>&lt;p>
C static analysis tools often use intermediate representations (IRs)
that organize program data in a simple, well-structured
manner. However, the C parsers that create IRs are slow, and because
they are difficult to write, only a few implementations exist,
limiting the languages in which a C static analysis can be written. To
solve these problems, we investigate two language-independent,
on-disk representations of C IRs: one using XML, and the other using
an Internet standard binary encoding called XDR. We benchmark the
parsing speeds of both options, finding the XML to be about a factor
of two slower than parsing C and the XDR
over six times faster.
Furthermore, we show that the XML files are far too large
at 19 times the size of C source code, while XDR is only 2.2 times
the C size. We also demonstrate the
portability of our XDR system by presenting a C source code querying tool in
Ruby. Our solution and the insights we gained from building it will
be useful to analysis authors and other clients of C IRs. We have made
our software freely available for download at
&lt;a href="http://www.cs.umd.edu/projects/PL/scil/">
&lt;a href="http://www.cs.umd.edu/projects/PL/scil/" target="_blank" rel="noopener">http://www.cs.umd.edu/projects/PL/scil/&lt;/a>&lt;/a>.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/miller14gpads.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/miller14gpads.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Authenticated Data Structures, Generically&lt;/b>.
Andrew Miller, Michael Hicks, Jonathan Katz, and Elaine Shi.
In &lt;em>Proceedings of the ACM Conference on Principles of
Programming Languages (POPL)&lt;/em>, January 2014.&lt;/font>&lt;p>
An authenticated data structure (ADS) is a data structure whose
operations can be carried out by an untrusted &lt;em>prover&lt;/em>, the
results of which a &lt;em>verifier&lt;/em> can efficiently check as
authentic. This is done by having the prover produce a compact proof
that the verifier can check along with each operation&amp;rsquo;s result. ADSs thus
support outsourcing data maintenance and processing tasks to
untrusted servers without loss of integrity. Past work on ADSs has
focused on particular data structures (or limited classes of data
structures), one at a time, often with support only for particular
operations.&lt;p>
This paper presents a generic method, using a simple
extension to a ML-like functional programming language we call LambdaAuth,
with which one can program authenticated operations
over any data structure defined by standard type constructors,
including recursive types, sums, and products. The programmer writes
the data structure largely as usual and it is compiled to code
to be run by the prover and verifier. Using a formalization of LambdaAuth
we prove that all well-typed LambdaAuth programs result in code that is
secure under the standard cryptographic assumption of
collision-resistant hash functions. We have implemented LambdaAuth
as an extension to the OCaml compiler, and have used it to produce
authenticated versions of many interesting data structures including
binary search trees, red-black+ trees, skip lists, and
more. Performance experiments show that our approach is efficient,
giving up little compared to the hand-optimized data structures
developed previously.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/MooreHN98.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/MooreHN98.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>General-Purpose Persistence Using Flash Memory&lt;/b>.
Jonathan T. Moore, Michael Hicks, and Scott Nettles.
Unpublished manuscript, April 1997.&lt;/font>&lt;p>
Flash memory is a semiconductor memory technology that has interesting
price, performance, and semantic tradeoffs. We have developed Gordon,
a general-purpose persistence system for Standard ML that uses Flash
mapped into the virtual address space as its stable storage medium.&lt;p>
Flash supports a write-once/bulk-erase interface that makes it
difficult to support update-in-place semantics. In addition, Flash
chips are only guaranteed to survive a limited number of erase
cycles. Gordon has been designed to overcome these difficulties, and
our performance analysis demonstrates good performance and reasonable
lifetimes for appropriate application domains.&lt;p>[ &lt;a href="https://mhicks.me/papers/flash.ps">.ps&lt;/a> ]
&lt;a name="MooreHN98">&lt;/a>&lt;pre>
@unpublished{MooreHN98,
author = {Jonathan T. Moore and Michael Hicks and Scott Nettles},
title = {General-Purpose Persistence Using Flash Memory},
year = 1997,
month = {April},
note = {Unpublished manuscript}
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/MT-TR.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/MT-TR.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Contextual Effects for Version-Consistent Dynamic Software Updating and
Safe Concurrent Programming (extended version)&lt;/b>.
Iulian Neamtiu, Michael Hicks, Jeffrey S. Foster, and Polyvios
Pratikakis.
Technical Report CS-TR-4875, University of Maryland, Department of
Computer Science, July 2007.&lt;/font>&lt;p>
This paper presents a generalization of standard effect systems that
we call &lt;em>contextual effects&lt;/em>. A traditional effect system
computes the effect of an expression &lt;em>e&lt;/em>. Our system additionally
computes the effects of the computational context in which &lt;em>e&lt;/em> occurs:
both the effect of the computation that has already occurred
(&lt;em>prior effects&lt;/em>) and the effect of the computation yet to take
place (&lt;em>future effects&lt;/em>).&lt;p>
Contextual effects can be used in any application in which the past or
future computation of the program is relevant at various program points. We
present two substantial examples. First, we show how prior and future
effects can be used to enforce &lt;em>transactional version consistency&lt;/em>
(TVC), a novel correctness property for dynamic software updates. TVC
ensures that programmer-designated transactional code blocks appear to
execute entirely at the same code version, even if a dynamic update occurs
in the middle of the block. Second, we show how future effects can be used
in the analysis of multi-threaded programs to find thread-shared locations.
This is an essential step in applications such as data race detection.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/neamtiu05evolution.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/neamtiu05evolution.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Understanding Source Code Evolution Using Abstract Syntax Tree Matching&lt;/b>.
Iulian Neamtiu, Jeffrey S. Foster, and Michael Hicks.
In &lt;em>Proceedings of the International Workshop on Mining Software
Repositories (MSR)&lt;/em>, pages 1&amp;ndash;5, May 2005.&lt;/font>&lt;p>
Mining software repositories at the source code level can provide a
greater understanding of how software evolves.
We present a tool for quickly comparing the source code of different
versions of a C program. The approach is based on partial abstract
syntax tree matching, and can track simple
changes to global variables, types and functions. These changes can
characterize aspects of software evolution useful for answering higher
level questions. In particular, we consider how they could be used to
inform the design of a dynamic software updating system.
We report results based on measurements of various versions of
popular open source
programs, including BIND, OpenSSH, Apache, Vsftpd and the Linux kernel.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/neamtiu06dsu.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/neamtiu06dsu.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Practical Dynamic Software Updating for C&lt;/b>.
Iulian Neamtiu, Michael Hicks, Gareth Stoyle, and Manuel Oriol.
In &lt;em>Proceedings of the ACM Conference on Programming Language
Design and Implementation (PLDI)&lt;/em>, pages 72&amp;ndash;83, June 2006.&lt;/font>&lt;p>
Software updates typically require stopping and restarting an
application, but many systems cannot afford to halt service, or would
prefer not to. &lt;em>Dynamic software updating&lt;/em> (DSU) addresses this
difficulty by permitting programs to be updated while they run. DSU
is appealing compared to other approaches for on-line upgrades because
it is quite general and requires no redundant hardware. The challenge
is in making DSU &lt;em>practical&lt;/em>: it should be flexible, and yet
safe, efficient, and easy to use.&lt;p>
In this paper, we present Ginseng, a DSU implementation for C that aims to
meet this challenge. We compile programs specially so that they can
be dynamically patched, and generate most of a dynamic patch
automatically. Ginseng performs a series of analyses that when
combined with some simple runtime support ensure that an update will
not violate type-safety while guaranteeing that data is kept
up-to-date. We have used Ginseng to construct and dynamically
apply patches to three substantial open-source server
programs&amp;mdash;&lt;em>Very Secure FTP daemon&lt;/em>, &lt;em>OpenSSH sshd daemon&lt;/em>, and
&lt;em>GNU Zebra&lt;/em>. In total, we dynamically patched each program with
three years&amp;rsquo; worth of releases. Though the programs changed
substantially, the majority of updates were easy to generate.
Performance experiments show that all patches could be applied in less
than 5 &lt;em>ms&lt;/em>, and that the overhead on application throughput due to
updating support ranged from 0 to at most 32%.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/neamtiu08context.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/neamtiu08context.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Contextual Effects for Version-Consistent Dynamic Software Updating and
Safe Concurrent Programming&lt;/b>.
Iulian Neamtiu, Michael Hicks, Jeffrey S. Foster, and Polyvios
Pratikakis.
In &lt;em>Proceedings of the ACM Conference on Principles of
Programming Languages (POPL)&lt;/em>, pages 37&amp;ndash;50, January 2008.&lt;/font>&lt;p>
This paper presents a generalization of standard effect systems that
we call &lt;em>contextual effects&lt;/em>. A traditional effect system
computes the effect of an expression &lt;em>e&lt;/em>. Our system additionally
computes the effects of the computational context in which &lt;em>e&lt;/em> occurs:
both the effect of the computation that has already occurred
(&lt;em>prior effects&lt;/em>) and the effect of the computation yet to take
place (&lt;em>future effects&lt;/em>).&lt;p>
Contextual effects can be used in any application in which the past or
future computation of the program is relevant at various program points. We
present two substantial examples. First, we show how prior and future
effects can be used to enforce &lt;em>transactional version consistency&lt;/em>
(TVC), a novel correctness property for dynamic software updates. TVC
ensures that programmer-designated transactional code blocks appear to
execute entirely at the same code version, even if a dynamic update occurs
in the middle of the block. Second, we show how future effects can be used
in the analysis of multi-threaded programs to find thread-shared locations.
This is an essential step in applications such as data race detection.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/neamtiu09stump.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/neamtiu09stump.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Safe and Timely Dynamic Updates for Multi-threaded Programs&lt;/b>.
Iulian Neamtiu and Michael Hicks.
In &lt;em>Proceedings of the ACM Conference on Programming Language
Design and Implementation (PLDI)&lt;/em>, pages 13&amp;ndash;24, June 2009.&lt;/font>&lt;p>
Many dynamic updating systems have been developed that enable a
program to be patched while it runs, to fix bugs or add new
features. This paper explores techniques for supporting dynamic
updates to multi-threaded programs, focusing on the problem of
applying an update in a timely fashion
while still producing correct behavior. Past work has shown that
this tension of &lt;em>safety&lt;/em> versus &lt;em>timeliness&lt;/em> can be balanced for
single-threaded programs. For
multi-threaded programs, the task is more difficult because
myriad thread interactions complicate understanding the possible
program states to which a patch could be applied. Our approach allows
the programmer to specify a few program points (e.g., one per
thread) at which a patch may be applied, which simplifies reasoning
about safety. To improve timeliness, a combination of static
analysis and run-time support automatically expands these few points
to many more that produce behavior equivalent to
the originals. Experiments with thirteen realistic updates to three
multi-threaded servers show that we can safely perform a dynamic
update within milliseconds when more straightforward alternatives would
delay some updates indefinitely.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/ngyuen17numinv.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/ngyuen17numinv.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>A Counterexample-guided Approach to Finding Numerical Invariants&lt;/b>.
ThanhVu Nguyen, Timos Antopoulos, Andrew Ruef, and Michael Hicks.
In &lt;em>Proceedings of the European Software Engineering Conference
and the ACM SIGSOFT Symposium on the Foundations of Software Engineering
(ESEC/FSE)&lt;/em>, September 2017.&lt;/font>&lt;p>
Numerical invariants, e.g., relationships among numerical variables
in a program, represent a useful class of properties to analyze programs.
General polynomial invariants represent more complex
numerical relations, but they are often required in many scientific
and engineering applications. We present NumInv, a tool that implements
a counterexample-guided invariant generation (CEGIR)
to automatically discover numerical invariants, which are polynomial
equality and inequality relations among numerical variables.
This CEGIR technique infers candidate invariants from program
traces and then checks them against the program source code using
the KLEE test-input generation tool. If the invariants are incorrect
KLEE returns counterexample traces, which help the dynamic
inference obtain better results. Existing CEGIR approaches often
require sound invariants, however NumInv sacrifices soundness
and produces results that KLEE cannot refute within certain time
bound. This design and the use of KLEE as a verifier allow NumInv
to discover useful and important numerical invariants for many
challenging programs.&lt;p>
Preliminary results show that NumInv generates required invariants
for understanding and verifying correctness of programs
involving complex arithmetic. We also show that NumInv discovers
polynomial invariants that capture precise complexity bounds of
programs used to benchmark existing static complexity analysis
techniques. Finally, we show that NumInv performs competitively
comparing to state of the art numerical invariant analysis tools&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/oriol05tset.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/oriol05tset.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Tagged Sets: a Secure and Transparent Coordination Medium&lt;/b>.
Manuel Oriol and Michael Hicks.
In Jean-Marie Jacquet and Gian Pietro Picco, editors, &lt;em>
Proceedings of the International Conference on Coordination Models and
Languages (COORDINATION)&lt;/em>, volume 3454 of &lt;em>Lecture Notes in Computer
Science&lt;/em>, pages 252&amp;ndash;267. Springer-Verlag, April 2005.&lt;/font>&lt;p>
A simple and effective way of coordinating distributed, mobile, and
parallel applications is to use a virtual shared memory (VSM), such as
a Linda tuple-space. In this paper, we propose a new kind of VSM,
called a &lt;em>tagged set&lt;/em>. Each element in the VSM is a value with
an associated tag, and values are read or removed from the VSM by
matching the tag. Tagged sets exhibit three properties useful for
VSMs:&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/papageorgiou04probe.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/papageorgiou04probe.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Merging Network Measurement with Data Transport (Extended Abstract)&lt;/b>.
Pavlos Papageorgiou and Michael Hicks.
In &lt;em>Proceedings of the IEEE Passive/Active Measurement Workshop
(PAM)&lt;/em>, volume 3431, pages 368&amp;ndash;371. Springer-Verlag, March 2005.&lt;/font>&lt;p>
The tasks of measurement and data transport are often treated
independently, but we believe there are benefits to bringing them
together. This paper proposes the simple idea of a transport agent
to encapsulate useful data within probe packets in place of
useless padding.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/papageorgiou09mgrp.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/papageorgiou09mgrp.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Passive Aggressive Measurement with MGRP&lt;/b>.
Pavlos Papageorge, Justin McCann, and Michael Hicks.
In &lt;em>Proceedings of the ACM SIGCOMM Conference on
Applications, Technologies, Architectures, and Protocols for Computer
Communications (SIGCOMM)&lt;/em>, pages 279&amp;ndash;290, August 2009.&lt;/font>&lt;p>
We present the &lt;em>Measurement Manager Protocol&lt;/em> (MGRP),
an in-kernel service that schedules and transmits probes
on behalf of active measurement tools. Unlike prior measurement
services, MGRP transparently piggybacks application packets inside
the often significant amounts of empty padding contained in typical
probes. Using MGRP thus combines the modularity, flexibility, and
accuracy of standalone active measurement tools with the lower
overhead of passive measurement techniques. Microbenchmark experiments
show that the resulting bandwidth savings makes it possible to
measure the network accurately, but faster and more aggressively than
without piggybacking, and with
few ill effects to piggybacked application or competing
traffic. When using MGRP to schedule
measurements on behalf of MediaNet, an overlay service
that adaptively schedules media streams, we show MediaNet can achieve
significantly higher streaming rates under the same network
conditions.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/parker20bibifi.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/parker20bibifi.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Build It, Break It, Fix It: Contesting Secure Development&lt;/b>.
James Parker, Michael Hicks, Andrew Ruef, Michelle L. Mazurek, Dave
Levin, Daniel Votipka, Piotr Mardziel, and Kelsey R. Fulton.
&lt;em>ACM Transactions on Privacy and Security (TOPS)&lt;/em>, 23(2), April
2020.&lt;/font>&lt;p>
Typical security contests focus on breaking or mitigating the impact
of buggy systems. We present the Build-it, Break-it, Fix-it
(BIBIFI) contest, which aims to assess the ability to securely
build software, not just break it. In BIBIFI, teams build specified
software with the goal of maximizing correctness, performance, and
security. The latter is tested when teams attempt to break other
teams&amp;rsquo; submissions. Winners are chosen from among the best builders
and the best breakers. BIBIFI was designed to be open-ended&amp;mdash;teams
can use any language, tool, process, etc. that they like. As such,
contest outcomes shed light on factors that correlate with
successfully building secure software and breaking insecure
software. We ran three contests involving a total of 156
teams and three different programming problems.
Quantitative analysis
from these contests found that the most efficient build-it
submissions used C/C++, but submissions coded in a statically-type safe
language were 11× less likely to have a security flaw than C/C++ submissions.
Break-it teams that were also successful build-it teams were
significantly better at finding security bugs.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/petroni07sbcfi.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/petroni07sbcfi.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Automated Detection of Persistent Kernel Control-Flow Attacks&lt;/b>.
Nick L. Petroni, Jr. and Michael Hicks.
In &lt;em>Proceedings of the ACM Conference on Computer and
Communications Security (CCS)&lt;/em>, pages 103&amp;ndash;115, October 2007.&lt;/font>&lt;p>
This paper presents a new approach to dynamically monitoring operating
system kernel integrity, based on a property called &lt;em>state-based
control-flow integrity&lt;/em> (SBCFI). Violations of SBCFI signal a
persistent, unexpected modification of the kernel&amp;rsquo;s control-flow
graph. We performed a thorough analysis of 25 Linux rootkits and
found that 24 (96%) employ persistent control-flow modifications; an
informal study of Windows rootkits yielded similar results. We have
implemented SBCFI enforcement as part of the Xen and VMware virtual
machine monitors. Our implementation detected all the control-flow
modifying rootkits we could install, while imposing unnoticeable
overhead for both a typical web server workload and CPU-intensive
workloads when operating at 10 second intervals.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/petroni07sbcfitr.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/petroni07sbcfitr.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Automated Detection of Persistent Kernel Control-Flow Attacks&lt;/b>.
Nick L. Petroni, Jr. and Michael Hicks.
Technical Report CS-TR-4880, Department of Computer Science,
University of Maryland, October 2007.
Extends the CCS 2007 paper with more thorough performance results.&lt;/font>&lt;p>
This paper presents a new approach to dynamically monitoring operating
system kernel integrity, based on a property called &lt;em>state-based
control-flow integrity&lt;/em> (SBCFI). Violations of SBCFI signal a
persistent, unexpected modification of the kernel&amp;rsquo;s control-flow
graph. We performed a thorough analysis of 25 Linux rootkits and
found that 24 (96%) employ persistent control-flow modifications; an
informal study of Windows rootkits yielded similar results. We have
implemented SBCFI enforcement as part of the Xen and VMware virtual
machine monitors. Our implementation detected all the control-flow
modifying rootkits we could install, while imposing negligible
overhead for both a typical web server workload and CPU-intensive
workloads when operating at 1 second intervals on a multi-core machine.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/pina13rubah.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/pina13rubah.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Rubah: Efficient, General-purpose Dynamic Software Updating for Java&lt;/b>.
Luis Pina and Michael Hicks.
In &lt;em>Proceedings of the Workshop on Hot Topics in Software
Upgrades (HotSWUp)&lt;/em>, June 2013.&lt;/font>&lt;p>
This paper presents Rubah, a new dynamic software updating (DSU)
system for Java programs that works on stock VMs. Rubah supports a
large range of program changes (e.g., changes to the class hierarchy
and updates to running methods), does not restrict important
programming idioms (e.g., reflection), and, as shown by performance
experiments using an updatable version of the H2 database management
system, imposes low overhead on normal execution.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/pina14rubah.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/pina14rubah.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Rubah: DSU for Java on a stock JVM&lt;/b>.
Luís Pina, Luís Veiga, and Michael Hicks.
In &lt;em>Proceedings of the ACM Conference on Object-Oriented
Programming Languages, Systems, and Applications (OOPSLA)&lt;/em>, October 2014.&lt;/font>&lt;p>
This paper presents Rubah, the first &lt;em>dynamic software
updating&lt;/em> system for Java that: is portable, implemented via
libraries and bytecode rewriting on top of a standard JVM; is
efficient, imposing essentially no overhead on normal, steady-state execution; is
flexible, allowing nearly arbitrary changes to classes between updates; and
is non-disruptive, employing either a novel &lt;em>eager&lt;/em> algorithm
that transforms the program state with multiple threads, or a novel
&lt;em>lazy&lt;/em> algorithm that transforms objects as they are demanded,
post-update. Requiring little programmer effort, Rubah has been used
to dynamically update five
long-running applications: the H2 database, the
Voldemort key-value store, the Jake2 implementation of the Quake
2 shooter game, the CrossFTP server, and the JavaEmailServer.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/pina16tedsuto.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/pina16tedsuto.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Tedsuto: A General Framework for Testing Dynamic Software Updates&lt;/b>.
Luis Pina and Michael Hicks.
In &lt;em>Proceedings of the International Conference on Software
Testing (ICST)&lt;/em>, April 2016.&lt;/font>&lt;p>
Dynamic software updating (DSU) is a technique for patching
&lt;em>running&lt;/em> programs, to fix bugs or add new features.
DSU avoids the downtime of stop-and-restart updates, but creates new
risks&amp;mdash;an incorrect or ill-timed dynamic update could result in a
crash or misbehavior, defeating the whole purpose of DSU . To
reduce such risks, dynamic updates should be carefully
tested before they are deployed.
This paper presents Tedsuto, a general testing framework for DSU,
along with a concrete implementation of it for Rubah, a state-of-the-art Java-based
DSU system. Tedsuto uses system-level tests developed for the old
and new versions of the updateable software, and systematically
tests whether a dynamic update might result in a test
failure. Very often this process is fully automated, while in some
cases (e.g., to test new-version functionality) some manual
annotations are required.
To evaluate Tedsuto&amp;rsquo;s efficacy, we applied it to dynamic
updates previously developed (and tested in an ad hoc manner) for
the H2 SQL database server and the CrossFTP server&amp;mdash; two
real-world, multithreaded systems. We used three large test suites, totalling
446 tests, and we found a variety of
update-related bugs in short order, and at low cost.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/pina19mvedsua.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/pina19mvedsua.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>MVEDSUa: Higher Availability Dynamic Software Updates via Multi-Version
Execution&lt;/b>.
Luis Pina, Anastasios Andronidis, Michael Hicks, and Cristian Cadar.
In &lt;em>Proceedings of the International Conference on Architectural
Support for Programming Languages and Operating Systems (ASPLOS)&lt;/em>, April
2019.&lt;/font>&lt;p>
Dynamic Software Updating (DSU) is a general-purpose technique for
patching stateful software without shutting it down, which enables
both timely updates and non-stop service. However, applying an update
could induce a long delay in service, and bugs in the
update&amp;mdash;both in the changed code and in the specification for
effecting that change dynamically&amp;mdash;may cause the updated software to
crash or misbehave. &lt;p>
This paper proposes MVEDSUa, a system that solves these problems by
augmenting a DSU system with support for Multi-Version Execution
(MVE). To start, MVEDSUa performs an update in
parallel with the original system, thereby avoiding any service
delay. Then, it monitors that the updated and original systems&amp;rsquo; responses agree
when given the same inputs. Expected differences are
specified by the programmer, so remaining differences signal likely
errors. If the new version shows no problems, it can be installed
permanently.&lt;p>
We implemented MVEDSUa on top of Kitsune and Varan, state-of-the-art DSU
and MVE systems respectively, and used it to update several
high-performance servers: redis, memcached, and vsftpd. Our
results show that MVEDSUa significantly reduces the update-time delay, imposes
little overhead in steady state, and easily recovers from a variety of
update-related errors.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/pratikakis04transparent.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/pratikakis04transparent.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Transparent Proxies for Java Futures&lt;/b>.
Polyvios Pratikakis, Jaime Spacco, and Michael Hicks.
In &lt;em>Proceedings of the ACM Conference on Object-Oriented
Programming Languages, Systems, and Applications (OOPSLA)&lt;/em>, pages 206&amp;ndash;223,
October 2004.&lt;/font>&lt;p>
A &lt;em>proxy&lt;/em> object is a surrogate or placeholder that controls access to
another target object. Proxies can be used to support distributed
programming, lazy or parallel evaluation, access control, and other simple
forms of behavioral reflection. However, &lt;em>wrapper proxies&lt;/em>
(like &lt;em>futures&lt;/em> or &lt;em>suspensions&lt;/em> for yet-to-be-computed results)
can require significant code changes to be used in statically-typed
languages, while proxies more generally can inadvertently violate
assumptions of transparency, resulting in subtle bugs.&lt;p>
To solve these problems, we have designed and implemented a simple framework
for proxy programming that employs a static analysis based on qualifier
inference, but with additional novelties. Code for
using wrapper proxies is automatically introduced via a
classfile-to-classfile transformation, and potential violations of
transparency are signaled to the programmer. We have formalized our
analysis and proven it sound. Our framework has a variety of applications,
including support for asynchronous method calls returning futures.
Experimental results demonstrate the benefits of our framework: programmers
are relieved of managing and/or checking proxy usage, analysis times are
reasonably fast, overheads introduced by added dynamic checks are
negligible, and performance improvements can be significant. For example,
changing two lines in a simple RMI-based peer-to-peer application and then
using our framework resulted in a large performance gain.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/pratikakis04transparentTR.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/pratikakis04transparentTR.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Transparent Proxies for Java Futures (Extended version)&lt;/b>.
Polyvios Pratikakis, Jaime Spacco, and Michael Hicks.
Technical Report CS-TR-4574, University of Maryland, Department of
Computer Science, October 2004.&lt;/font>&lt;p>
A &lt;em>proxy&lt;/em> object is a surrogate or placeholder that controls access to
another target object. Proxies can be used to support distributed
programming, lazy or parallel evaluation, access control, and other simple
forms of behavioral reflection. However, &lt;em>wrapper proxies&lt;/em>
(like &lt;em>futures&lt;/em> or &lt;em>suspensions&lt;/em> for yet-to-be-computed results)
can require significant code changes to be used in statically-typed
languages, while proxies more generally can inadvertently violate
assumptions of transparency, resulting in subtle bugs.&lt;p>
To solve these problems, we have designed and implemented a simple framework
for proxy programming that employs a static analysis based on qualifier
inference, but with additional novelties. Code for
using wrapper proxies is automatically introduced via a
classfile-to-classfile transformation, and potential violations of
transparency are signaled to the programmer. We have formalized our
analysis and proven it sound. Our framework has a variety of applications,
including support for asynchronous method calls returning futures.
Experimental results demonstrate the benefits of our framework: programmers
are relieved of managing and/or checking proxy usage, analysis times are
reasonably fast, overheads introduced by added dynamic checks are
negligible, and performance improvements can be significant. For example,
changing two lines in a simple RMI-based peer-to-peer application and then
using our framework resulted in a large performance gain.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/pratikakis05existstr.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/pratikakis05existstr.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Existential Label Flow Inference via CFL Reachability (Extended
Version)&lt;/b>.
Polyvios Pratikakis, Michael Hicks, and Jeffrey S. Foster.
Technical Report CS-TR-4700, Department of Computer Science,
University of Maryland, July 2005.&lt;/font>&lt;p>
Label flow analysis is a fundamental static analysis problem with a
wide variety of applications. Previous work by Mossin developed a
polynomial time subtyping-based label flow inference that supports
Hindley-Milner style polymorphism with polymorphic recursion. Rehof
et al have developed an efficient &lt;em>O&lt;/em>(&lt;em>n&lt;/em>&lt;sup>3&lt;/sup>) inference algorithm for
Mossin&amp;rsquo;s system based on context-free language (CFL) reachability.
In this paper, we extend these results to a system that also
supports existential polymorphism, which is important for precisely
describing correlations among members of a structured type, even
when values of that type are part of dynamic data structures. We
first develop a provably sound checking system based on
polymorphically-constrained types. As usual, we restrict universal
quantification to the top level of a type, but existential
quantification is first class, with subtyping allowed between
existentials with the same binding structure. We then develop a
CFL-based inference system. Programmers specify which positions in
a type are existentially quantified, and the algorithm infers the
constraints bound in the type, or rejects a program if the
annotations are inconsistent.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/pratikakis06exists.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/pratikakis06exists.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Existential Label Flow Inference via CFL Reachability&lt;/b>.
Polyvios Pratikakis, Jeffrey S. Foster, and Michael Hicks.
In Kwangkeun Yi, editor, &lt;em>Proceedings of the Static Analysis
Symposium (SAS)&lt;/em>, volume 4134 of &lt;em>Lecture Notes in Computer Science&lt;/em>,
pages 88&amp;ndash;106. Springer-Verlag, August 2006.&lt;/font>&lt;p>
In programming languages, existential quantification is useful for
describing relationships among members of a structured type. For
example, we may have a list in which there &lt;em>exists&lt;/em> some
mutual exclusion lock &lt;em>l&lt;/em> in each list element such that &lt;em>l&lt;/em>
protects the data stored in that element.
With this information, a static analysis can reason
about the relationship between locks and locations in the list even
when the precise identity of the lock and/or location is unknown.
To facilitate the construction of such static analyses, this paper
presents a context-sensitive &lt;em>label flow analysis&lt;/em> algorithm with
support
for existential quantification. Label flow analysis is a core part
of many static analysis systems. Following Rehof et al, we use context-free
language (CFL) reachability to develop an efficient &lt;em>O&lt;/em>(&lt;em>n&lt;/em>&lt;sup>3&lt;/sup>)
label flow inference algorithm. We prove the algorithm sound by reducing its
derivations to those in a system based on
polymorphically-constrained types, in the style of Mossin. We have
implemented a variant of our analysis as part of a data race detection
tool for C programs.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/pratikakis06locksmith.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/pratikakis06locksmith.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Context-sensitive Correlation Analysis for Detecting Races&lt;/b>.
Polyvios Pratikakis, Jeffrey S. Foster, and Michael Hicks.
In &lt;em>Proceedings of the ACM Conference on Programming Language
Design and Implementation (PLDI)&lt;/em>, pages 320&amp;ndash;331, June 2006.&lt;/font>&lt;p>
One common technique for preventing data races in multi-threaded
programs is to ensure that all accesses to shared locations are
consistently protected by a lock. We present a tool called Locksmith
for detecting data races in C programs by looking for violations of
this pattern. We call the relationship between locks and the
locations they protect consistent correlation, and the core of our
technique is a novel constraint-based analysis that infers
consistent correlation context-sensitively, using the results to check that
locations are properly guarded by locks. We present the core of
our algorithm for a simple formal language &lt;em>lambda-corr&lt;/em> which we have
proven sound, and discuss how we scale it up to an algorithm that
aims to be sound for all of C.
We develop several techniques to improve the precision and
performance of the analysis, including a sharing analysis for
inferring thread locality; existential quantification for modeling
locks in data structures; and heuristics for modeling unsafe
features of C such as type casts. When applied to several
benchmarks, including multi-threaded servers and Linux device
drivers, Locksmith found several races while producing a modest
number of false alarms.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/pratikakis06locksmithtr.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/pratikakis06locksmithtr.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Context-sensitive Correlation Analysis for Detecting Races (Extended
version)&lt;/b>.
Polyvios Pratikakis, Jeffrey S. Foster, and Michael Hicks.
Technical Report CS-TR-4789, Department of Computer Science,
University of Maryland, June 2006.
Extends PLDI 2006 paper with full formal development.&lt;/font>&lt;p>
One common technique for preventing data races in multi-threaded
programs is to ensure that all accesses to shared locations are
consistently protected by a lock. We present a tool called Locksmith
for detecting data races in C programs by looking for violations of
this pattern. We call the relationship between locks and the
locations they protect consistent correlation, and the core of our
technique is a novel constraint-based analysis that infers
consistent correlation context-sensitively, using the results to check that
locations are properly guarded by locks. We present the core of
our algorithm for a simple formal language &lt;em>lambda-corr&lt;/em> which we have
proven sound, and discuss how we scale it up to an algorithm that
aims to be sound for all of C.
We develop several techniques to improve the precision and
performance of the analysis, including a sharing analysis for
inferring thread locality; existential quantification for modeling
locks in data structures; and heuristics for modeling unsafe
features of C such as type casts. When applied to several
benchmarks, including multi-threaded servers and Linux device
drivers, Locksmith found several races while producing a modest
number of false alarms.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/pratikakis08context.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/pratikakis08context.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Formalizing Soundness of Contextual Effects&lt;/b>.
Polyvios Pratikakis, Jeffrey S. Foster, Michael Hicks, and Iulian
Neamtiu.
In Otmane Aït Mohamed, César Mun̄oz, and Sofiène Tahar,
editors, &lt;em>Proceedings of the International Conference on Theorem Proving
in Higher Order Logics (TPHOLs)&lt;/em>, volume 5170 of &lt;em>Lecture Notes in
Computer Science&lt;/em>, pages 262&amp;ndash;277. Springer, August 2008.&lt;/font>&lt;p>
A &lt;em>contextual effects&lt;/em> system generalizes standard type
and effect systems: where a standard effects system computes the
effect of an expression &lt;em>e&lt;/em>, a contextual effects system
additionally computes the &lt;em>prior&lt;/em> and &lt;em>future&lt;/em> effect of
&lt;em>e&lt;/em>, which characterize the behavior of computation prior to, and
following, respectively, the evaluation of &lt;em>e&lt;/em>. This paper
describes the formalization and proof of soundness of contextual
effects, which we mechanized using the Coq proof assistant.
Contextual effect soundness is an unusual property because the prior
and future effect of a term &lt;em>e&lt;/em> depends not on &lt;em>e&lt;/em> itself (or its
evaluation), but rather on the evaluation of the context in which
&lt;em>e&lt;/em> appears. Therefore, to state and prove soundness we must
“match up” a subterm in the original typing derivation with the
possibly-many evaluations of that subterm during the evaluation of
the program, in a way that is robust under substitution. We do this
using a novel typed operational semantics. We conjecture that our
approach could prove useful for approaching other properties of
derivations that rely on the context in which that derivation
appears.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/pratikakis11locksmith.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/pratikakis11locksmith.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Locksmith: Practical Static Race Detection for C&lt;/b>.
Polyvios Pratikakis, Jeffrey S. Foster, and Michael Hicks.
&lt;em>ACM Transactions on Programming Languages and Systems
(TOPLAS)&lt;/em>, 33(1):Article 3, January 2011.&lt;/font>&lt;p>
Locksmith is a static analysis tool for automatically detecting
data races in C programs. In this paper, we describe each of
Locksmith&amp;rsquo;s component analyses precisely, and present systematic
measurements that isolate interesting tradeoffs between precision
and efficiency in each analysis. Using a benchmark suite comprising
standalone applications and Linux device drivers totaling more than
200,000 lines of code, we found that a simple no-worklist strategy
yielded the most efficient interprocedural dataflow analysis; that
our sharing analysis was able to determine that most locations are
thread-local, and therefore need not be protected by locks; that
modeling C structs and void pointers precisely is key to both
precision and efficiency; and that context-sensitivity yields a much
more precise analysis, though with decreased scalability. Put
together, our results illuminate some of the key engineering
challenges in building Locksmith and data race detection analyses
in particular, and constraint-based program analyses in general.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/rastogi13knowledge.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/rastogi13knowledge.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Knowledge Inference for Optimizing Secure Multi-party Computation&lt;/b>.
Aseem Rastogi, Piotr Mardziel, Matthew Hammer, and Michael Hicks.
In &lt;em>Proceedings of the ACM SIGPLAN Workshop on Programming
Languages and Analysis for Security (PLAS)&lt;/em>, June 2013.&lt;/font>&lt;p>
In secure multi-party computation, mutually distrusting parties
cooperatively compute functions of their private data; in the process,
they only learn certain results as per the protocol (e.g., the final
output).
The realization of these protocols uses cryptographic techniques to
avoid leaking information between the parties.
A protocol for a secure computation can sometimes be optimized without
changing its security guarantee:
when the parties can use their private data and the revealed output to
infer the values of other data, then this other data need not be
concealed from them via cryptography.&lt;p>
In the context of automatically optimizing secure multi-party
computation, we define two related problems, &lt;em>knowledge
inference&lt;/em> and &lt;em>constructive knowledge inference&lt;/em>.
In both problems, we attempt to automatically discover when and if
intermediate variables used in a protocol will (eventually) be known
to the parties involved in the computation.
Provably-known variables offer optimization opportunities.&lt;p>
We formally state the problem of knowledge inference (and its
constructive variant); we describe our solutions, which are built atop
existing, standard technology such as SMT solvers.
We show that our approach is sound, and further, we
characterize the completeness properties enjoyed by our approach.
We have implemented our approach, and present a preliminary experimental evaluation.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/rastogi14wysteria.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/rastogi14wysteria.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Wysteria: A Programming Language for Generic, Mixed-Mode Multiparty
Computations&lt;/b>.
Aseem Rastogi, Matthew A. Hammer, and Michael Hicks.
In &lt;em>Proceedings of the IEEE Symposium on Security and Privacy
(Oakland)&lt;/em>, May 2014.&lt;/font>&lt;p>
In a Secure Multiparty Computation (SMC), mutually distrusting
parties use cryptographic techniques to cooperatively compute over
their private data; in the process each party learns only explicitly
revealed outputs. In this paper, we present Wysteria, a high-level
programming language for writing SMCs. As with past languages, like
Fairplay, Wysteria compiles secure computations to circuits that
are executed by an underlying engine. Unlike past work, Wysteria
provides support for &lt;em>mixed-mode&lt;/em> programs, which combine
local, private computations with synchronous SMCs. Wysteria
complements a standard feature set with built-in support for secret
shares and with &lt;em>wire bundles&lt;/em>, a new abstraction that supports
generic &lt;em>n&lt;/em>-party computations. We have formalized Wysteria, its
refinement type system, and its operational semantics. We
show that Wysteria programs have an easy-to-understand
single-threaded interpretation and prove that this view corresponds
to the actual multi-threaded semantics. We also prove type
soundness, a property we show has security ramifications, namely
that information about one party&amp;rsquo;s data can only be revealed to
another via (agreed upon) secure computations. We have implemented
Wysteria, and used it to program a variety of interesting SMC
protocols from the literature, as well as several new ones. We find
that Wysteria&amp;rsquo;s performance
is competitive with prior approaches while making
programming far easier, and more trustworthy.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/rastogi14wysteriaTR.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/rastogi14wysteriaTR.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Wysteria: A Programming Language for Generic, Mixed-Mode Multiparty
Computations (extended version)&lt;/b>.
Aseem Rastogi, Matthew A. Hammer, and Michael Hicks.
Technical Report CS-TR-5034, Department of Computer Science, the
University of Maryland, College Park, May 2014.&lt;/font>&lt;p>
In a Secure Multiparty Computation (SMC), mutually distrusting parties use cryptographic techniques to cooperatively compute over their private data; in the process each party learns only explicitly revealed outputs. In this paper, we present Wysteria, a high-level programming language for writing SMCs. As with past languages, like Fairplay, Wysteria compiles secure computations to circuits that are executed by an underlying engine. Unlike past work, Wysteria provides support for mixed-mode programs, which combine local, private computations with synchronous SMCs. Wysteria complements a standard feature set with built-in support for secret shares and with wire bundles, a new abstraction that supports generic n-party computations. We have formalized Wysteria, its refinement type system, and its operational semantics. We show that Wysteria programs have an easy-to-understand single-threaded interpretation and prove that this view corresponds to the actual multi-threaded semantics. We also prove type soundness, a property we show has security ramifications, namely that information about one party&amp;rsquo;s data can only be revealed to another via (agreed upon) secure computations. We have implemented Wysteria, and used it to program a variety of interesting SMC protocols from the literature, as well as several new ones. We find that Wysteria&amp;rsquo;s performance is competitive with prior approaches while making programming far easier, and more trustworthy.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/rose04dynamic.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/rose04dynamic.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Dynamic Inference of Polymorphic Lock Types&lt;/b>.
James Rose, Nikhil Swamy, and Michael Hicks.
In &lt;em>Proceedings of the ACM Conference on Principles of
Distributed Computing (PODC) Workshop on Concurrency and Synchronization in
Java Programs (CSJP)&lt;/em>, pages 18&amp;ndash;25, July 2004.&lt;/font>&lt;p>
We present an approach for automatically proving the absence of race
conditions in multi-threaded Java programs, using a combination of
dynamic and static analysis. The program in question is instrumented
so that when executed it will gather information about locking
relationships. This information is then fed to our tool, FindLocks,
that generates annotations needed to type check the program using the
Race-Free Java type system. Our approach
extends existing inference algorithms by being fully
context-sensitive. We describe the design and implementation of our
approach, and our experience applying the tool to a variety of Java
programs. In general, we have found the approach works well, but has
trouble scaling to large programs, which require extensive testing for
full coverage.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/rose05scp.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/rose05scp.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Dynamic Inference of Polymorphic Lock Types&lt;/b>.
James Rose, Nikhil Swamy, and Michael Hicks.
&lt;em>Science of Computer Programming (SCP)&lt;/em>, 58(3):366&amp;ndash;383, December
2005.
Special Issue on Concurrency and Synchronization in Java programs.
Supercedes 2004 CSJP paper of the same name.&lt;/font>&lt;p>&lt;p>[ &lt;a href="https://mhicks.me/papers/dynamic-locktypes-scp.pdf">.pdf&lt;/a> ]
&lt;a name="rose05scp">&lt;/a>&lt;pre>
@article{rose05scp,
author = {James Rose and Nikhil Swamy and Michael Hicks},
title = {Dynamic Inference of Polymorphic Lock Types},
journal = {Science of Computer Programming (SCP)},
volume = 58,
number = 3,
pages = {366&amp;ndash;383},
month = {December},
year = 2005,
note = {Special Issue on Concurrency and Synchronization in Java programs. Supercedes 2004 CSJP paper of the same name.},
publisher = {Elsevier}
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/ruef15bibifi.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/ruef15bibifi.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Build It Break It: Measuring and Comparing Development Security&lt;/b>.
Andrew Ruef, Michael Hicks, James Parker, Dave Levin, Atif Memon,
Jandelyn Plane, and Piotr Mardziel.
In &lt;em>Proceedings of the USENIX Workshop on Cyber Security
Instrumentation and Test (CSET)&lt;/em>, August 2015.&lt;/font>&lt;p>
There is currently little evidence about what tools, methods, processes,
and languages lead to secure software. We present the experimental design
of the Build it Break it secure programming contest as an aim to provide
such evidence. The contest also provides education value to participants
where they gain experience developing programs in an adversarial settings.
We show preliminary results from previous runs of the contest that
demonstrate the contest works as designed, and provides the data desired.
We are in the process of scaling the contest to collect larger data sets
with the goal of making statistically significant correlations between
various factors of development and software security.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/ruef18checkedc-incr.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/ruef18checkedc-incr.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Achieving Safety Incrementally with Checked C&lt;/b>.
Andrew Ruef, Leonidas Lampropoulos, Ian Sweet, David Tarditi, and
Michael Hicks.
In &lt;em>Proceedings of the Symposium on Principles of Security and
Trust (POST)&lt;/em>, April 2019.&lt;/font>&lt;p>
Checked C is a new effort working toward a memory-safe C. Its design
is distinguished from that of prior efforts by truly being an
&lt;em>extension&lt;/em> of C: Every C program is also a Checked C
program. Thus, one may make incremental safety improvements to
existing codebases while retaining backward compatibility. This
paper makes two contributions. First, to help developers convert
existing C code to use so-called &lt;em>checked&lt;/em> (i.e., safe)
pointers, we have developed a preliminary, automated porting tool. Notably, this
tool takes advantage of the flexibility of Checked C&amp;rsquo;s design: The
tool need not perfectly classify every pointer, as required of prior
all-or-nothing efforts. Rather, it can make a best effort to convert
more pointers accurately, without letting inaccuracies inhibit
compilation. However, such partial conversion raises the question:
If safety violations can still occur, what sort of advantage does
using Checked C provide? We draw inspiration from research on
migratory typing to make our second contribution: We prove a
&lt;em>blame&lt;/em> property that renders so-called &lt;em>checked regions&lt;/em>
blameless of any run-time failure. We formalize this property for a
core calculus and mechanize the proof in Coq.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/saur15morpheus.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/saur15morpheus.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Safe and Flexible Controller Upgrades for SDNs&lt;/b>.
Karla Saur, Joseph Collard, Nate Foster, Arjun Guha, Laurent
Vanbever, and Michael Hicks.
In &lt;em>Proceedings of the Symposium on SDN Research (SOSR)&lt;/em>, March
2016.&lt;/font>&lt;p>
SDN controllers must be periodically upgraded to add features,
improve performance, and fix bugs, but current techniques for
implementing &lt;em>dynamic updates&lt;/em>&amp;mdash;i.e., without disrupting
ongoing network functions&amp;mdash;are inadequate. Simply halting the old
controller and bringing up the new one can cause state to be lost,
leading to incorrect behavior. For example, if the state represents
flows blacklisted by a firewall, then traffic that should be blocked
may be allowed to pass through. Techniques based on record and
replay can reconstruct controller state automatically, but they are
expensive to deploy and do not work in all scenarios.&lt;p>
This paper presents a new approach to implementing dynamic updates
for SDN controllers. We present the design and implementation of a
new controller platform called Morpheus that uses &lt;em>explicit state
transfer&lt;/em> to implement dynamic updates. Morpheus enables programmers to
directly initialize the upgraded controller&amp;rsquo;s state as a function of
its existing state, using a domain-specific language that is
designed to be easy to use. Morpheus also offers a distributed protocol
for safely deploying updates across multiple nodes. Experiments
confirm that Morpheus provides correct behavior and good performance.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/saur15strider.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/saur15strider.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>C-Strider: Type-Aware Heap Traversal for C&lt;/b>.
Karla Saur, Michael Hicks, and Jeffrey S. Foster.
&lt;em>Software, Practice, and Experience&lt;/em>, May 2015.&lt;/font>&lt;p>
Researchers have proposed many tools and techniques that work by
traversing the heap, including checkpointing systems, heap
profilers, heap assertion checkers, and dynamic software updating
systems. Yet building a heap traversal for C remains difficult, and
to our knowledge extant services have used their own application-specific
traversals. This paper presents C-strider, a framework for
writing C heap traversals and transformations. Writing a basic C-strider
service requires implementing only four callbacks; C-strider then
generates a program-specific traversal that invokes the callbacks as
each heap location is visited. Critically, C-strider is &lt;em>type aware&lt;/em>&amp;mdash;it
tracks types as it walks the heap, so every callback is supplied
with the exact type of the associated location. We used C-strider to
implement heap serialization, dynamic software
updating, heap checking, and profiling,
and then applied the resulting traversals to several
programs. We found C-strider requires little programmer
effort, and the resulting services are efficient and effective.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/saur16kvolve.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/saur16kvolve.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Evolving NoSQL Databases Without Downtime&lt;/b>.
Karla Saur, Tudor Dumitraş, and Michael Hicks.
In &lt;em>Proceedings of the International Conference on Software
Maintenance and Evolution (ICSME)&lt;/em>, October 2016.&lt;/font>&lt;p>
NoSQL
databases like Redis, Cassandra, and MongoDB are
increasingly popular because they are flexible, lightweight, and
easy to work with. Applications that use these databases
will evolve over time, sometimes necessitating (or preferring) a change
to the format or organization of the data. The problem we address in this paper is:
How can we support the evolution of high-availability applications
and their NoSQL data &lt;em>online&lt;/em>, without excessive delays or
interruptions, even in the presence of backward-incompatible
data format changes?&lt;p>
We present KVolve, an extension to the popular Redis NoSQL database, as a
solution to this problem. KVolve permits a developer to
submit an upgrade specification that defines how to
transform existing data to the newest version. This transformation
is applied &lt;em>lazily&lt;/em> as applications interact with the
database, thus avoiding long pause times. We demonstrate that KVolve is
expressive enough to support substantial practical updates,
including format changes to RedisFS, a Redis-backed file system,
while imposing essentially no overhead in general use and minimal
pause times during updates.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/SewellSHBW07.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/SewellSHBW07.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Dynamic Rebinding for Marshalling and Update, via Redex-time and
Destruct-time Reduction&lt;/b>.
Peter Sewell, Gareth Stoyle, Michael Hicks, Gavin Bierman, and Keith
Wansbrough.
&lt;em>Journal of Functional Programming (JFP)&lt;/em>, 18(4):437&amp;ndash;502, July
2008.
Appeared on-line October, 2007. Supercedes ICFP 2003 and USE 2003
papers.&lt;/font>&lt;p>
Most programming languages adopt static binding, but for distributed
programming an exclusive reliance on static binding is too
restrictive: dynamic binding is required in various guises, for
example when a marshalled value is received from the network,
containing identifiers that must be rebound to local resources.
Typically it is provided only by ad-hoc mechanisms that lack clean
semantics.&lt;p>
In this paper we adopt a foundational approach, developing core
dynamic rebinding mechanisms as extensions to the simply-typed
call-by-value lambda-calculus. To do so we must first explore
refinements of the call-by-value reduction strategy that delay
instantiation, to ensure computations make use of the most recent
versions of rebound definitions. We introduce redex-time and
destruct-time strategies. The latter forms the basis for a
lambda-marsh calculus that supports dynamic rebinding of marshalled
values, while remaining as far as possible statically-typed. We
sketch an extension of lambda-marsh with concurrency and
communication, giving examples showing how wrappers for encapsulating
untrusted code can be expressed. Finally, we show that a high-level
semantics for dynamic updating can also be based on the destruct-time
strategy, defining a lambda-update calculus with simple primitives to
provide type-safe updating of running code. We show how the ideas of
this simple calculus extend to more real-world, module-level dynamic
updating in the style of Erlang. We thereby establish primitives and
a common semantic foundation for a variety of real-world dynamic
rebinding requirements.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/smith12benchmark.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/smith12benchmark.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Towards Standardized Benchmarks for Dynamic Software Updating Systems&lt;/b>.
Edward K. Smith, Michael Hicks, and Jeffrey S. Foster.
In &lt;em>Proceedings of the Workshop on Hot Topics in Software
Upgrades (HotSWUp)&lt;/em>, pages 11&amp;ndash;15, June 2012.&lt;/font>&lt;p>
Dynamic Software Updating (DSU) has been an active topic of research
for at least the last 30 years. However, despite many recent
advances, DSU has yet to see widespread adoption and deployment in
practice. In this paper, we review a slice of the history of DSU
research to study how DSU for C has evolved over the last two
decades. We examine the ways DSU systems are
evaluated in the research literature. We identify several
shortcomings of the evaluation criteria that have been used, and
propose key improvements. We believe that using better evaluation
criteria can guide DSU research to produce systems that will
be more practical, flexible, and usable.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/SongSHN02.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/SongSHN02.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Evolution in Action: Using Active Networking to Evolve Network Support for
Mobility&lt;/b>.
Seo-Kyu Song, Stephen Shannon, Michael Hicks, and Scott Nettles.
In James Sterbenz, Osamu Takada, Christian Tschudin, and Bernhard
Plattner, editors, &lt;em>Proceedings of the Fourth International Working
Conference on Active Networks (IWAN)&lt;/em>, volume 2546 of &lt;em>Lecture Notes in
Computer Science&lt;/em>, pages 146&amp;ndash;161. Springer-Verlag, December 2002.&lt;/font>&lt;p>
A key early objective of Active Networking (AN) was to support
on-the-fly network evolution. Although AN has been used
relatively extensively to build application-customized protocols
and even whole networking systems, demonstrations of evolution
have been limited. This paper examines three AN mechanisms and how they enable
evolution: active packets and plug-in extensions, well-known to the AN
community, and update extensions, which are novel to AN. We devote our
presentation to a series of demonstrations of how each type of evolution can
be applied to the problem of adding support for mobility to a network. This
represents the most large-scale demonstration of AN evolution to date. These
demonstrations show what previous AN research has not: that AN technology
can, in fact, support very significant changes to the network, even while
the network is operational.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/srivastava06cmodtr.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/srivastava06cmodtr.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Defining and Enforcing C&amp;rsquo;s Module System&lt;/b>.
Saurabh Srivastava, Michael Hicks, Jeffrey S. Foster, and Bhargav
Kanagal.
Technical Report CS-4816, Department of Computer Science, University
of Maryland, July 2006.&lt;/font>&lt;p>
Programming language module systems are an important tool for
managing the complexity of large software systems. The C
programming language is used to build many such systems, yet it
lacks a proper module system. Instead, C programmers typically
follow a convention that treats &lt;tt>.h&lt;/tt> header files as
interfaces and &lt;tt>.c&lt;/tt> source files as modules. This
convention can be effective, but there are many subtleties in using
it correctly, and the compiler and linker provide no enforcement
mechanism. As a result, misuse of the convention can lead to
hard-to-find bugs, can make reasoning about code in isolation more
difficult, and can complicate future code maintenance.&lt;p>
This paper presents CMod, a module system for C that ensures
abstraction via information hiding and type-safe separate compilation. Our
approach is to identify and enforce the circumstances under
which C&amp;rsquo;s current modular programming convention is sound. The result is
four rules that, using an operational semantics for an
idealized preprocessor, we have proven are sufficient to guarantee
the desired modularity properties. We have implemented CMod for the
full C language and applied it to a number of benchmarks. We found
that most of the time legacy programs obey CMod&amp;rsquo;s rules, or can be
made to with minimal effort, and rule violations often result in
type errors or brittle code. Thus CMod brings the benefits of
modular programming to C while still supporting
legacy systems.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/srivastava07cmod.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/srivastava07cmod.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Modular Information Hiding and Type Safety for C&lt;/b>.
Saurabh Srivastava, Michael Hicks, and Jeffrey S. Foster.
In &lt;em>Proceedings of the ACM Workshop on Types in Language Design
and Implementation (TLDI)&lt;/em>, pages 3&amp;ndash;14, January 2007.&lt;/font>&lt;p>
This paper presents CMod, a novel tool that provides a sound
module system for C . CMod works by enforcing a set of four rules
that are based on principles of modular reasoning and on current
programming practice. CMod&amp;rsquo;s rules flesh out the convention that
&lt;tt>.h&lt;/tt> header files are module interfaces and &lt;tt>.c&lt;/tt>
source files are module implementations. Although this convention
is well-known, developing CMod&amp;rsquo;s rules revealed there are many
subtleties in applying the basic pattern correctly. We have proven
formally that CMod&amp;rsquo;s rules enforce both information hiding and
type-safe linking.
We evaluated CMod on a number of benchmarks, and found
that most programs obey CMod&amp;rsquo;s rules, or can be made to with
minimal effort, while rule violations reveal brittle coding practices
including numerous information hiding violations and occasional type errors.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/srivastava07cmodjournaltr.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/srivastava07cmodjournaltr.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Appendix to CMod: Modular Information Hiding and Type-Safe Linking for
C&lt;/b>.
Saurabh Srivastava, Michael Hicks, and Jeffrey S. Foster.
Technical Report CS-TR-4874, Department of Computer Science,
University of Maryland, June 2007.&lt;/font>&lt;p>
This brief note is an appendix to &lt;em>CMod: Modular
Information Hiding and Type-Safe Linking for C&lt;/em> (Srivastava et al., June 2007).
It consists of the proof of soundness for the formal language presented in that paper.&lt;/p>
&lt;p>[&amp;nbsp;&lt;a href="https://mhicks.me/papers/appendix-proof.pdf">.pdf&lt;/a>&amp;nbsp;]
&lt;a name="srivastava07cmodjournaltr">&lt;/a>&lt;pre>
@techreport{srivastava07cmodjournaltr,
 author = {Saurabh Srivastava and Michael Hicks and Jeffrey S. Foster},
 title = {Appendix to {CMod}: Modular Information Hiding and Type-Safe Linking for {C}},
 institution = {Department of Computer Science, University of Maryland},
 month = jun,
 year = 2007,
 number = {CS-TR-4874}
}
&lt;/pre>
&lt;hr>&lt;p>&lt;em>This file was generated by
&lt;a href="http://www.lri.fr/~filliatr/bibtex2html/">bibtex2html&lt;/a> 1.99.&lt;/em>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/srivastava08cmodjournal.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/srivastava08cmodjournal.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Modular Information Hiding and Type Safe Linking for C&lt;/b>.
Saurabh Srivastava, Michael Hicks, Jeffrey S. Foster, and Patrick
Jenkins.
&lt;em>IEEE Transactions on Software Engineering&lt;/em>, 34(3):1&amp;ndash;20, May
2008.
Full version of TLDI 07 paper.&lt;/font>&lt;p>
This paper presents CMod, a novel tool that provides a sound
module system for C . CMod works by enforcing a set of four
rules that are based on principles of modular reasoning and on
current programming practice. CMod&amp;rsquo;s rules flesh out the
convention that &lt;tt>.h&lt;/tt> header files are module interfaces and
&lt;tt>.c&lt;/tt> source files are module implementations. Although this
convention is well-known, existing explanations of it are
incomplete, omitting important subtleties needed for soundness. In
contrast, we have proven formally that CMod&amp;rsquo;s rules enforce both
information hiding and type-safe linking.&lt;p>
To use CMod, the programmer develops and builds their software as
usual, redirecting the compiler and linker to CMod&amp;rsquo;s wrappers. We
evaluated CMod by applying it to 30 open source
programs, totaling more than one million lines of code. Violations to
CMod&amp;rsquo;s rules revealed more than a thousand information hiding errors,
dozens of typing errors, and hundreds of cases that, although not
currently bugs, make programming mistakes more likely as the code
evolves. At the same time, programs generally adhere
to the assumptions underlying CMod&amp;rsquo;s rules, and so we could fix rule violations
with a modest effort. We conclude that CMod can effectively support
modular programming in C: it soundly enforces type-safe linking and
information hiding while being largely compatible with existing practice.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/srivatsa12mobility.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/srivatsa12mobility.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Deanonymizing Mobility Traces: Using a Social Network as a Side-Channel&lt;/b>.
Mudhakar Srivatsa and Michael Hicks.
In &lt;em>Proceedings of the ACM Conference on Computer and
Communications Security (CCS)&lt;/em>, October 2012.&lt;/font>&lt;p>
Location-based services, which employ data from
smartphones, vehicles, etc., are growing in popularity.&lt;br>
To reduce the threat that shared location data poses to a user&amp;rsquo;s
privacy, some services anonymize or obfuscate this data.
In this paper, we show these methods can be effectively defeated: a
set of location traces can be deanonymized given an easily
obtained social network graph.
The key idea of our approach is that a user may be identified by those she
meets: a &lt;em>contact graph&lt;/em> identifying meetings between
anonymized users in a set of traces can be structurally correlated
with a social network graph, thereby identifying anonymized
users. We demonstrate the effectiveness of our approach using three
real world datasets: University of St Andrews mobility trace and
social network (27 nodes each), SmallBlue contact trace and Facebook
social network (125 nodes), and Infocom 2006 bluetooth contact
traces and conference attendees&amp;rsquo; DBLP social network (78 nodes). Our
experiments show that 80% of users are identified
precisely, while only 8% are identified incorrectly, with the
remainder mapped to a small set of users.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/StoyleHBSN05.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/StoyleHBSN05.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>&lt;em>Mutatis Mutandis&lt;/em>: Safe and Flexible Dynamic Software Updating&lt;/b>.
Gareth Stoyle, Michael Hicks, Gavin Bierman, Peter Sewell, and Iulian
Neamtiu.
In &lt;em>Proceedings of the ACM Conference on Principles of
Programming Languages (POPL)&lt;/em>, pages 183&amp;ndash;194, January 2005.&lt;/font>&lt;p>
Dynamic software updates can be used to fix bugs or add features to a
running program without downtime. Essential for some applications and
convenient for others, low-level dynamic updating support has been
used for many years. However, there is little high-level
understanding that would support programmers in writing dynamic
updates effectively.&lt;p>
In an effort to bridge this gap, we present a formal calculus called
Proteus for modeling dynamic software updating in C-like languages
that is flexible, safe, and predictable. Proteus supports dynamic
updates to functions (even those that are active) and types, allowing
on-line evolution to match source-code evolution as we have observed
it in practice. All updates are provably type-safe and
&lt;em>representation-consistent&lt;/em>, meaning that only one version of a given
type may exist in the program at any time, simplifying reasoning and
avoiding unintuitive copy-based semantics. Finally, Proteus&amp;rsquo;s novel
and efficient static &lt;em>updateability analysis&lt;/em> allows a programmer to
automatically prove that an update is independent of the on-line
program state, and thus predict it will not fail dynamically. Proteus
admits a straightforward implementation, and we sketch how it could be
extended to more advanced language features including threads.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/StoyleHBSN06.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/StoyleHBSN06.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>&lt;em>Mutatis Mutandis&lt;/em>: Safe and Flexible Dynamic Software Updating (full
version)&lt;/b>.
Gareth Stoyle, Michael Hicks, Gavin Bierman, Peter Sewell, and Iulian
Neamtiu.
&lt;em>ACM Transactions on Programming Languages and Systems
(TOPLAS)&lt;/em>, 29(4), August 2007.
Full version of POPL 05 paper.&lt;/font>&lt;p>
This paper presents Proteus, a core calculus that models dynamic
software updating, a service for fixing bugs and adding features to a
running program. Proteus permits a program&amp;rsquo;s type structure to change
dynamically but guarantees the updated program remains type-correct by
ensuring a property we call “con-freeness.” We show how con-freeness
can be enforced dynamically, and how it can be approximated via a
novel static analysis. This analysis can be used to assess the
implications of a program&amp;rsquo;s structure on future updates, to make
update success more predictable. We have implemented Proteus for C,
and briefly discuss our implementation, which we have tested on
several well-known programs.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/subramanian09jvolve.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/subramanian09jvolve.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Dynamic Software Updates: A VM-Centric Approach&lt;/b>.
Suriya Subramanian, Michael Hicks, and Kathryn S. McKinley.
In &lt;em>Proceedings of the ACM Conference on Programming Language
Design and Implementation (PLDI)&lt;/em>, pages 1&amp;ndash;12, June 2009.&lt;/font>&lt;p>
Software evolves to fix bugs and add features. Stopping and restarting
programs to apply changes is inconvenient and often costly. Dynamic
software updating (DSU) addresses this problem by updating programs while
they execute, but existing DSU systems for managed languages do not support
many updates that occur in practice and are inefficient. This paper
presents the design and implementation of Jvolve, a DSU-enhanced Java VM.
Updated programs may add, delete, and replace fields and methods anywhere
within the class hierarchy. Jvolve implements these updates by adding to
and coordinating VM classloading, just-in-time compilation, scheduling,
return barriers, on-stack replacement, and garbage collection. Jvolve is
safe: its use of bytecode verification and VM thread synchronization
ensures that an update will always produce type-correct executions. Jvolve
is flexible: it can support 20 of 22 updates to three open-source
programs&amp;mdash;Jetty web server, JavaEmailServer, and CrossFTP server&amp;mdash;based
on actual releases occurring over 1 to 2 years. Jvolve is efficient:
performance experiments show that incurs no overhead during steady-state
execution. These results demonstrate that this work is a significant step
towards practical support for dynamic updates in virtual machines for
managed languages.&lt;p>[ &lt;a href="https://mhicks.me/papers/jvolve.pdf">.pdf&lt;/a> ]
&lt;a name="subramanian09jvolve">&lt;/a>&lt;pre>
@inproceedings{subramanian09jvolve,
author = {Suriya Subramanian and Michael Hicks and Kathryn S. McKinley},
title = {Dynamic Software Updates: A {VM}-Centric Approach},
booktitle = {Proceedings of the {ACM} Conference on Programming Language Design and Implementation (PLDI)},
month = jun,
year = 2009,
pages = {1&amp;ndash;12}
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/swamy05experience.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/swamy05experience.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Safe Manual Memory Management in Cyclone&lt;/b>.
Nikhil Swamy, Michael Hicks, Greg Morrisett, Dan Grossman, and Trevor
Jim.
&lt;em>Science of Computer Programming (SCP)&lt;/em>, 62(2):122&amp;ndash;144, October
2006.
Special issue on memory management. Expands ISMM conference paper of
the same name.&lt;/font>&lt;p>
The goal of the Cyclone project is to investigate how to make a
low-level C-like language safe. Our most difficult challenge has
been providing programmers control over memory management while
retaining safety. This paper describes our experience trying
to integrate and use effectively two previously-proposed, safe
memory-management mechanisms: statically-scoped regions and tracked
pointers. We found that these typing mechanisms can be combined to
build alternative memory-management abstractions, such as reference
counted objects and arenas with dynamic lifetimes, and thus provide
a flexible basis. Our experience&amp;mdash;porting C programs and device
drivers, and building new applications for resource-constrained
systems&amp;mdash;confirms that experts can use these features to improve
memory footprint and sometimes to improve throughput when used
instead of, or in combination with, conservative garbage collection.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/swamy06rx.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/swamy06rx.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Managing Policy Updates in Security-Typed Languages&lt;/b>.
Nikhil Swamy, Michael Hicks, Stephen Tse, and Steve Zdancewic.
In &lt;em>Proceedings of the Computer Security Foundations Workshop
(CSFW)&lt;/em>, pages 202&amp;ndash;216, July 2006.&lt;/font>&lt;p>
This paper presents RX, a new security-typed
programming language with features intended to make the management of
information-flow policies more practical. Security labels in RX,
in contrast to prior approaches, are defined in terms of &lt;em>owned
roles&lt;/em>, as found in the RT role-based trust-management framework.
Role-based security policies allows flexible delegation, and our
language RX provides constructs through which programs can robustly
update policies and react to policy updates dynamically. Our dynamic
semantics use statically verified &lt;em>transactions&lt;/em> to eliminate
illegal information flows across updates, which we call
&lt;em>transitive flow&lt;/em>. Because policy updates can be observed
through dynamic queries, policy updates can potentially reveal
sensitive information. As such, RX considers policy statements
themselves to be potentially confidential information and subject to
information-flow &lt;em>metapolicies&lt;/em>.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/swamy06rxtr.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/swamy06rxtr.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Managing Policy Updates in Security-Typed Languages (Extended version)&lt;/b>.
Nikhil Swamy, Michael Hicks, Stephen Tse, and Steve Zdancewic.
Technical Report CS-TR-4793, Department of Computer Science,
University of Maryland, August 2006.
Extends CSFW version to include full proofs and additional discussion
about metapolicies.&lt;/font>&lt;p>
This paper presents RX, a new security-typed
programming language with features intended to make the management of
information-flow policies more practical. Security labels in RX,
in contrast to prior approaches, are defined in terms of &lt;em>owned
roles&lt;/em>, as found in the RT role-based trust-management framework.
Role-based security policies allows flexible delegation, and our
language RX provides constructs through which programs can robustly
update policies and react to policy updates dynamically. Our dynamic
semantics use statically verified &lt;em>transactions&lt;/em> to eliminate
illegal information flows across updates, which we call
&lt;em>transitive flow&lt;/em>. Because policy updates can be observed
through dynamic queries, policy updates can potentially reveal
sensitive information. As such, RX considers policy statements
themselves to be potentially confidential information and subject to
information-flow &lt;em>metapolicies&lt;/em>.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/swamy07milcom.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/swamy07milcom.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Verified Enforcement of Security Policies for Cross-Domain Information
Flows&lt;/b>.
Nikhil Swamy, Michael Hicks, and Simon Tsang.
In &lt;em>Proceedings of the 2007 Military Communications Conference
(MILCOM)&lt;/em>, October 2007.&lt;/font>&lt;p>
We describe work in progress that uses program analysis to show that
security-critical programs, such as cross-domain guards, correctly
enforce cross-domain security policies.
We are enhancing existing techniques from the field of
security-oriented programming languages to construct a new language
for the construction of secure networked applications, &lt;em>SELinks&lt;/em>.
In order to specify and enforce expressive and fine-grained policies,
we advocate dynamically associating security labels with sensitive
entities.
Programs written in &lt;em>SELinks&lt;/em> are statically guaranteed to
correctly manipulate an entity&amp;rsquo;s security labels and to ensure that
the appropriate policy checks mediate all operations that are
performed on the entity.
We discuss the design of our main case study: a web-based
collaborative planning application that will permit a collection
of users, with varying security requirements and clearances, to access
sensitive data sources and collaboratively create documents based on
these sources.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/swamy08air.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/swamy08air.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Verified Enforcement of Stateful Information Release Policies&lt;/b>.
Nikhil Swamy and Michael Hicks.
In &lt;em>Proceedings of the ACM SIGPLAN Workshop on Programming
Languages and Analysis for Security (PLAS)&lt;/em>, pages 21&amp;ndash;32, June 2008.&lt;/font>&lt;p>
Many organizations specify &lt;em>information release&lt;/em> policies to
describe the terms under which sensitive information may be released
to other organizations. This paper presents a new approach for
ensuring that security-critical software correctly enforces its
information release policy. Our approach has two parts. First, an
information release policy is specified as a security automaton
written in a new language called AIR. Second, we enforce an AIR
policy by translating it into an API for programs written in Lair,
a core formalism for a functional programming language. Lair uses
a novel combination of dependent, affine, and singleton types to
ensure that the API is used correctly. As a consequence we can
certify that programs written in Lair meet the requirements of
the original AIR policy specification.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/swamy08fable.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/swamy08fable.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Fable: A Language for Enforcing User-defined Security Policies&lt;/b>.
Nikhil Swamy, Brian Corcoran, and Michael Hicks.
In &lt;em>Proceedings of the IEEE Symposium on Security and Privacy
(Oakland)&lt;/em>, pages 369&amp;ndash;383, May 2008.&lt;/font>&lt;p>
This paper presents Fable, a core formalism for a programming language
in which programmers may specify security policies and reason that
these policies are properly enforced. In Fable,
security policies can be expressed by associating &lt;em>security
labels&lt;/em> with the data or actions they protect. Programmers define the
semantics of labels in a separate part of the program called the
&lt;em>enforcement policy&lt;/em>. Fable prevents a policy from being circumvented
by allowing labeled terms to be manipulated only within the enforcement
policy; application code must treat labeled values abstractly.
Together, these features
facilitate straightforward proofs that programs implementing a
particular policy achieve their high-level security goals. Fable is
flexible enough to implement a wide variety of security policies,
including access control, information flow, provenance, and security
automata. We have implemented Fable as part of the Links web
programming language; we call the resulting language SELinks. We
report on our experience using SElinks to build two substantial
applications, a wiki and an on-line store, equipped with a combination of
access control and provenance policies.
To our knowledge, no existing framework enables
the enforcement of such a wide variety of security policies with an
equally high level of assurance.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/swamy09coercion.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/swamy09coercion.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>A Theory of Typed Coercions and its Applications&lt;/b>.
Nikhil Swamy, Michael Hicks, and Gavin S. Bierman.
In &lt;em>Proceedings of the ACM International Conference on
Functional Programming (ICFP)&lt;/em>, pages 329&amp;ndash;340, August 2009.&lt;/font>&lt;p>
A number of important program rewriting scenarios can be recast as
type-directed coercion insertion. These range from more theoretical
applications such as coercive subtyping and supporting overloading
in type theories, to more practical applications such as integrating
static and dynamically typed code using gradual typing, and inlining
code to enforce security policies such as access control and
provenance tracking. In this paper we give a general theory of
type-directed coercion insertion.
We specifically explore the inherent tradeoff between
expressiveness and ambiguity&amp;mdash;the more powerful the strategy for
generating coercions, the greater the possibility of several,
semantically distinct rewritings for a given program. We consider
increasingly powerful coercion generation strategies, work out
example applications supported by the increased power (including
those mentioned above), and identify the inherent ambiguity problems
of each setting, along with various techniques to tame the
ambiguities.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/swamy11monad.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/swamy11monad.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Lightweight Monadic Programming in ML&lt;/b>.
Nikhil Swamy, Nataliya Guts, Daan Leijen, and Michael Hicks.
In &lt;em>Proceedings of the ACM International Conference on
Functional Programming (ICFP)&lt;/em>, pages 15&amp;ndash;27, September 2011.&lt;/font>&lt;p>
Many useful programming constructions can be expressed as monads.
Examples include probabilistic modeling,
functional reactive programming, parsing, and information flow tracking,
not to mention effectful functionality like state and I/O. In this
paper, we present a type-based rewriting algorithm to make
programming with arbitrary monads as easy as using ML&amp;rsquo;s built-in
support for state and I/O. Developers write programs using monadic
values of type &lt;em>M&lt;/em> &lt;em>t&lt;/em> as if they were of type &lt;em>t&lt;/em>, and our algorithm
inserts the necessary binds, units, and monad-to-monad morphisms so
that the program type checks. Our algorithm, based on Jones'
qualified types, produces principal types. But principal
types are sometimes
problematic: the program&amp;rsquo;s semantics could depend on the choice of
instantiation when more than one instantiation is valid. In such
situations we are able to simplify the types to remove
any ambiguity but without adversely affecting typability; thus we can
accept strictly more programs. Moreover, we have proved that this
simplification is &lt;em>efficient&lt;/em> (linear in the number of constraints)
and &lt;em>coherent&lt;/em>: while our algorithm induces a particular rewriting,
all related rewritings will have the same semantics.
We have implemented our approach for a core functional
language and applied it successfully to simple examples from the
domains listed above, which are used as illustrations throughout the
paper.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/sweet18prob.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/sweet18prob.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>What&amp;rsquo;s the Over/Under? Probabilistic Bounds on Information Leakage&lt;/b>.
Ian Sweet, José Manuel Calderón Trilla, Chad Scherrer, Michael
Hicks, and Stephen Magill.
In &lt;em>Proceedings of the Symposium on Principles of Security and
Trust (POST)&lt;/em>, April 2018.&lt;/font>&lt;p>
Quantitative information flow (QIF) is concerned with measuring
how much of a secret is leaked to an adversary who observes the
result of a computation that uses it. Prior work has shown that QIF
techniques based on &lt;em>abstract interpretation&lt;/em> with
&lt;em>probabilistic polyhedra&lt;/em> can be used to analyze the worst-case
leakage of a query, on-line, to determine whether that query can be
safely answered. While this approach can provide precise estimates,
it does not scale well. This paper shows how to solve the
scalability problem by augmenting the baseline technique with
&lt;em>sampling&lt;/em> and &lt;em>symbolic execution&lt;/em>. We prove that our
approach never underestimates a query&amp;rsquo;s leakage (it is
sound), and detailed experimental results show that we can
match the precision of the baseline technique but with orders of
magnitude better performance.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/sweet20odsnotpmto.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/sweet20odsnotpmto.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Short Paper: Probabilistically Almost-Oblivious Computation&lt;/b>.
Ian Sweet, David Darais, and Michael Hicks.
In &lt;em>Proceedings of the ACM SIGPLAN Workshop on Programming
Languages and Analysis for Security (PLAS)&lt;/em>, November 2020.&lt;/font>&lt;p>
Memory-trace Obliviousness (MTO) is a noninterference property: programs that enjoy it have neither explicit nor implicit information leaks, even when the adversary can observe the program counter and the address trace of memory accesses. &lt;em>Probabilistic&lt;/em> MTO relaxes MTO to accept probabilistic programs. In prior work, we developed λ&lt;sub>obliv&lt;/sub>, whose type system aims to enforce PMTO. We showed that λ&lt;sub>obliv&lt;/sub> could typecheck (recursive) Tree ORAM, a sophisticated algorithm that implements a probabilistically oblivious key-value store. We conjectured that λ&lt;sub>obliv&lt;/sub> ought to be able to typecheck more optimized &lt;em>oblivious data structures&lt;/em> (ODSs), but that its type system was as yet too weak.&lt;p>
In this short paper we show we were wrong: &lt;em>ODSs cannot be implemented in λ&lt;sub>obliv&lt;/sub> because they are not actually PMTO&lt;/em>, due to the possibility of &lt;em>overflow&lt;/em>, meaning: a &lt;tt>write&lt;/tt> may silently fail due to a local lack of space. This was surprising to us because Tree ORAM can also overflow but is still PMTO . The paper explains what is going on and sketches the task of adapting the PMTO property, and λ&lt;sub>obliv&lt;/sub>&amp;rsquo;s type system, to characterize ODS security.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/sweet23symphony.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/sweet23symphony.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Symphony: Expressive Secure Multiparty Computation with Coordination&lt;/b>.
Ian Sweet, David Darais, David Heath, Ryan Estes, Bill Harris, and
Michael Hicks.
&lt;em>&amp;lt;Programming&amp;gt;&lt;/em>, 7(14), February 2023.&lt;/font>&lt;p>
&lt;b>Context&lt;/b> Secure Multiparty Computation (MPC) refers to a family of
cryptographic techniques where
mutually untrusting parties may compute functions of
their private inputs while revealing only the function output.&lt;p>&lt;/p>
&lt;p>&lt;b>Inquiry&lt;/b> It can be hard to program MPCs correctly and
efficiently using existing languages and frameworks, especially when
they require coordinating disparate computational roles. How can we
make this easier?&lt;p>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/turpie11multiotter.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/turpie11multiotter.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>MultiOtter: Multiprocess Symbolic Execution&lt;/b>.
Jonathan Turpie, Elnatan Reisner, Jeffrey S. Foster, and Michael
Hicks.
Technical Report CS-TR-4982, University of Maryland Department of
Computer Science, August 2011.&lt;/font>&lt;p>
Symbolic execution can be an effective technique for exploring large numbers
of program paths, but it has generally been applied to programs running in
isolation, whose inputs are files or command-line arguments. Programs that
take inputs from other programs&amp;mdash;servers, for example&amp;mdash;have been
beyond the reach of symbolic execution. To address this, we developed a
multiprocess symbolic
executor called MultiOtter, along with an implementation of many of the POSIX functions, such as
&lt;tt>socket&lt;/tt> and &lt;tt>select&lt;/tt>, that interactive programs usually rely on.
However, that is just a first step. Next, we must determine what symbolic inputs
to feed to an interactive program to make multiprocess symbolic execution effective.
Providing completely unconstrained symbolic values causes symbolic execution
to spend too much time exploring uninteresting paths, such as paths to handle
invalid inputs. MultiOtter allows us to generate inputs that conform to a
context-free grammar, similar to previous work, but it also enables new input
generation capabilities because we can now run arbitrary programs concurrently
with the program being studied. As examples, we symbolically executed a
key-value store server, redis, and an FTP server, vsftpd, each with a variety
of inputs, including symbolic versions of tests from redis&amp;rsquo;s test suite
and wget as a client for vsftpd. We report the coverage provided by symbolic
execution with various forms of symbolic input, showing that different testing
goals require different degrees of symbolic inputs.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/voichick21qone.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/voichick21qone.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Toward A Quantum Programming Language for Higher-Level Formal
Verification&lt;/b>.
Finn Voichick and Michael Hicks.
In &lt;em>Informal Proceedings of the Workshop on Programming Languages
and Quantum Computing (PLanQC)&lt;/em>, June 2021.&lt;/font>&lt;p>
We present QuantumOne, a quantum programming language formalized within the Coq proof assistant and designed for formal verification of quantum algorithms. This language allows for working with superpositions of tagged unions, allowing for quantum data more complicated than simple qubits. This paper outlines the formal syntax, operational semantics, and typing judgment of QuantumOne.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/voichick23qunity.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/voichick23qunity.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Qunity: A Unified Language for Quantum and Classical Computing&lt;/b>.
Finn Voichick, Liyi Li, Robert Rand, and Michael Hicks.
In &lt;em>Proceedings of the ACM Conference on Principles of
Programming Languages (POPL)&lt;/em>, January 2023.&lt;/font>&lt;p>
We introduce Qunity, a new quantum programming language designed around the central goal of treating quantum computing as a natural generalization of classical computing.
Qunity presents a unified syntax where familiar programming constructs can have both quantum and classical effects.
For example, one can use sum types to implement the direct sum of linear operators, exception handling syntax to implement projective measurements, and aliasing to induce entanglement.
Further, Qunity takes advantage of the overlooked bqp subroutine theorem, allowing one to construct reversible subroutines from irreversible quantum algorithms through the uncomputation of “garbage” outputs.
Unlike existing languages that enable quantum aspects with a separate add-on (e.g., gates added to a classical language), we unify quantum and classical computing through novel compositional semantics based on Kraus operators.
We present Qunity&amp;rsquo;s syntax, type system, and denotational semantics, showing how it can cleanly express several quantum algorithms.
We also outline how Qunity could be compiled to OpenQasm, demonstrating the realizability of our design.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/wei18evaluating.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/wei18evaluating.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Evaluating Design Tradeoffs in Numeric Static Analysis for Java&lt;/b>.
Shiyi Wei, Piotr Mardziel, Andrew Ruef, Jeffrey S. Foster, and
Michael Hicks.
In &lt;em>Proceedings of the European Symposium on Programming (ESOP)&lt;/em>,
April 2018.&lt;/font>&lt;p>
Numeric static analysis for Java has a broad range of potentially
useful applications, including array bounds checking and resource
usage estimation. However, designing a scalable numeric static
analysis for real-world Java programs presents a multitude of design
choices, each of which may interact with others. For example, an
analysis could handle method calls via either a top-down or
bottom-up interprocedural analysis. Moreover, this choice could
interact with how we choose to represent aliasing in the heap and/or
whether we use a relational numeric domain, e.g., convex polyhedra.
In this paper, we present a family of abstract interpretation-based
numeric static analyses for Java and systematically evaluate the
impact of 162 analysis configurations on the DaCapo benchmark
suite. Our experiment considered the precision and performance of
the analyses for discharging array bounds checks. We found that
top-down analysis is generally a better choice than bottom-up
analysis, and that using access paths to describe heap objects is
better than using summary objects corresponding to points-to
analysis locations. Moreover, these two choices are the most
significant, while choices about the numeric domain, representation
of abstract objects, and context-sensitivity make much less
difference to the precision/performance tradeoff.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/wysstar18wysstar.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/wysstar18wysstar.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Wys&lt;sup>&lt;em>&lt;/sup>: A DSL for Verified Secure Multi-party Computations&lt;/b>.
Aseem Rastogi, Nikhil Swamy, and Michael Hicks.
In &lt;em>Proceedings of the Symposium on Principles of Security and
Trust (POST)&lt;/em>, April 2019.&lt;/font>&lt;p>
Secure multi-party computation (MPC) enables a set of mutually
distrusting parties to cooperatively compute, using a cryptographic
protocol, a function over their private data.
This paper presents Wys&lt;sup>&lt;/em>&lt;/sup>, a new domain-specific language (DSL)
for writing MPCs. Wys&lt;sup>&lt;em>&lt;/sup> is an embedded DSL hosted in F&lt;sup>&lt;/em>&lt;/sup>, a
verification-oriented, effectful programming language.
Wys&lt;sup>&lt;em>&lt;/sup> source programs are
essentially F&lt;sup>&lt;/em>&lt;/sup> programs written in a custom MPC effect, meaning
that the programmers can use F&lt;sup>&lt;em>&lt;/sup>&amp;rsquo;s logic to verify the correctness
and security properties of their programs. To reason about the
distributed runtime semantics of these programs, we formalize a deep
embedding of Wys&lt;sup>&lt;/em>&lt;/sup>, also in F&lt;sup>&lt;em>&lt;/sup>. We mechanize the necessary
metatheory to prove that the properties verified for the Wys&lt;sup>&lt;/em>&lt;/sup>
source programs carry over to the distributed, multi-party
semantics. Finally, we use F&lt;sup>&lt;em>&lt;/sup>&amp;rsquo;s extraction mechanism to
extract an interpreter that we have proved matches this semantics,
yielding a verified implementation. Wys&lt;sup>&lt;/em>&lt;/sup> is the first
DSL to enable formal verification of source MPC programs, and also the
first MPC DSL to provide a verified implementation.
With Wys&lt;sup>*&lt;/sup> we have implemented several MPC protocols, including
private set intersection, joint median, and an MPC-based card dealing
application, and have verified their security and correctness.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/zhang22configfuzz.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/zhang22configfuzz.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Fuzzing Configurations of Program Options&lt;/b>.
Zenong Zhang, George Klees, Eric Wang, Michael Hicks, and Shiyi Wei.
In &lt;em>Proceedings of the International Fuzzing Workshop&lt;/em>, April
2022.&lt;/font>&lt;p>
While many real-world programs are shipped with configurations to enable/disable functionalities, fuzzers have mostly been applied to test single configurations of these programs. In this work, we first conduct an empirical study to understand how program configurations affect fuzzing performance. We find that limiting a campaign to a single configuration can result in failing to cover a significant amount of code. We also observe that different program configurations contribute differing amounts of code coverage, challenging the idea that each one can be efficiently fuzzed individually. Motivated by these two observations we propose ConfigFuzz, which can fuzz configurations along with normal inputs. ConfigFuzz transforms the target program to encode its program options within part of the fuzzable input, so existing fuzzers&amp;rsquo; mutation operators can be reused to fuzz program configurations. We instantiate ConfigFuzz on 3 configurable, common fuzzing targets, and integrate their executions in FuzzBench. In our preliminary evaluation, ConfigFuzz nearly always outperforms the baseline fuzzing of a single configuration, and in one target also outperforms the fuzzing of a sequence of sampled configurations. However, we find that sometimes fuzzing a sequence of sampled configurations, with shared seeds, improves on ConfigFuzz. We propose hypotheses and plan to use data visualization to further understand the behavior of ConfigFuzz, and refine it, in the full evaluation.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/zhang22fixreverter.html</link><pubDate>Fri, 17 Oct 2025 07:37:49 -0400</pubDate><guid>https://mhicks.me/papers/zhang22fixreverter.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>FixReverter: A Realistic Bug Injection Methodology for Benchmarking Fuzz
Testing&lt;/b>.
Zenong Zhang, Zach Patterson, Michael Hicks, and Shiyi Wei.
In &lt;em>Proceedings of the USENIX Security Symposium (USENIX SEC)&lt;/em>,
August 2022.
&lt;b>Distinguished Paper&lt;/b>.&lt;/font>&lt;p>
Fuzz testing is an active area of research with proposed improvements published at a rapid pace. Such proposals are assessed &lt;em>empirically&lt;/em>: Can they be shown to perform better than the status quo? Such an assessment requires a benchmark of target programs with well-identified, realistic bugs. To ease the construction of such a benchmark, this paper presents FixReverter, a tool that automatically injects realistic bugs in a program. FixReverter takes as input a &lt;em>bugfix pattern&lt;/em> which contains both code syntax and semantic conditions. Any code site that matches the specified syntax is undone if the semantic conditions are satisfied, as checked by static analysis, thus (re)introducing a likely bug. This paper focuses on three bugfix patterns, which we call &lt;em>conditional-abort&lt;/em>, &lt;em>conditional-execute&lt;/em>, and &lt;em>conditional-assign&lt;/em>, based on a study of fixes in a corpus of Common Vulnerabilities and Exposures (CVEs). Using FixReverter we have built RevBugBench, which consists of 10 programs into which we have injected nearly 8,000 bugs; the programs are taken from FuzzBench and Binutils, and represent common targets of fuzzing evaluations. We have integrated RevBugBench into the FuzzBench service, and used it to evaluate five fuzzers. Fuzzing performance varies by fuzzer and program, as desired/expected. Overall, 219 unique bugs were reported, 19% of which were detected by just one fuzzer.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/mwh-cat.html</link><pubDate>Sat, 11 Oct 2025 16:11:40 -0400</pubDate><guid>https://mhicks.me/papers/mwh-cat.html</guid><description>&lt;html>
&lt;head>
&lt;meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
 &lt;link href="../style.css" rel="stylesheet" type="text/css">
&lt;title>Mike Hicks' Publications, by Category&lt;/title>
&lt;/head>
&lt;body>
&lt;h2>Mike Hicks' Publications, by Category&lt;/h2>
Also see publications &lt;a href = "mwh.html">by year&lt;/a>,
on &lt;a href = "https://dblp.org/pid/h/MichaelWHicks.html">DBLP&lt;/a>, and &lt;a href = "https://scholar.google.com/citations?user=Gggzp7UAAAAJ&amp;hl=en&amp;oi=ao">Google Scholar&lt;/a>.
&lt;h3>&lt;u>Security&lt;/u>&lt;/h3>
&lt;span style="font-style:italic">
&lt;p>The widespread sharing of information over the Internet has led to an
explosive growth of useful services. The challenge is to provide
information sharing while still ensuring integrity and confidentiality
of data. I have looked at programming language-based techniques --
new analyses and programming languages -- for ensuring these
properties.
&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/mwh.html</link><pubDate>Sat, 11 Oct 2025 16:11:40 -0400</pubDate><guid>https://mhicks.me/papers/mwh.html</guid><description>&lt;html>
&lt;head>
&lt;meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
 &lt;link href="../style.css" rel="stylesheet" type="text/css">
&lt;title>Mike Hicks' Publications, by Year&lt;/title>
&lt;/head>
&lt;body>
&lt;h2>Mike Hicks' Publications, by Year&lt;/h2>
Also see publications &lt;a href = "mwh-cat.html">by category&lt;/a>,
on &lt;a href = "https://dblp.org/pid/h/MichaelWHicks.html">DBLP&lt;/a>, and &lt;a href = "https://scholar.google.com/citations?user=Gggzp7UAAAAJ&amp;hl=en&amp;oi=ao">Google Scholar&lt;/a>.
&lt;h3>2025&lt;/h3>
&lt;table>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="chakarov25awsauth">&lt;a href="chakarov25awsauth.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Formally Verified Cloud-Scale Authorization&lt;/b>.
 Aleks Chakarov, Jaco Geldenhuys, Matthew Heck, Michael Hicks, Sam
 Huang, Georges-Axel Jaloyan, Anjali Joshi, K.&amp;nbsp;Rustan&amp;nbsp;M. Leino, Mikael Mayer,
 Sean McLaughlin, Akhilesh Mritunjai, Clement Pit-Claudel, Sorawee
 Porncharoenwase, Marianna Rapoport, Cody Roux, Neha Rungta, Robin Salkeld,
 Matthias Schlaipfer, Daniel Schoepe, Johanna Schwartzentruber, Serdar
 Tasiran, Aaron Tomb, Jean-Baptiste Tristan, Emina Torlak, Lucas Wagner,
 Michael&amp;nbsp;W. Whalen, Remy Willems, Tongtong Xiang, Tae&amp;nbsp;Joon Byun, Joshua Cohen,
 Ruijie Fang, Junyoung Jang, Jakob Rath, Hira&amp;nbsp;Taqdees Syeda, Dominik Wagner,
 and Yongwei Yuan.
 In &lt;em>Proceedings of the International Conference on Software
 Engineering (ICSE)&lt;/em>, April 2025.
 &lt;b>Distinguished Paper&lt;/b>.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;h3>2024&lt;/h3>
&lt;table>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="disselkoen24vgd">&lt;a href="disselkoen24vgd.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>How We Built Cedar: A Verification-Guided Approach&lt;/b>.
 Craig Disselkoen, Aaron Eline, Shaobo He, Kyle Headley, Michael
 Hicks, Kesha Hietala, John Kastner, Anwar Mamat, Matt McCutchen, Neha Rungta,
 Bhakti Shah, Emina Torlak, and Andrew Wells.
 In &lt;em>Proceedings of the European Software Engineering Conference
 and the ACM SIGSOFT Symposium on the Foundations of Software Engineering
 (ESEC/FSE)&lt;/em>, July 2024.
 Industry papers track.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="cutler24cedar">&lt;a href="cutler24cedar.html">2&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Cedar: A New Language for Expressive, Fast, Safe, and Analyzable
 Authorization (Extended Version)&lt;/b>.
 Joseph&amp;nbsp;W. Cutler, Craig Disselkoen, Aaron Eline, Shaobo He, Kyle
 Headley, Michael Hicks, Kesha Hietala, Eleftherios Ioannidis, John Kastner,
 Anwar Mamat, Darin McAdams, Matt McCutchen, Neha Rungta, Emina Torlak, and
 Andrew Wells.
 In &lt;em>Proceedings of the ACM Conference on Object-Oriented
 Programming Languages, Systems, and Applications (OOPSLA)&lt;/em>, April 2024.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="cutler24typesafety">&lt;a href="cutler24typesafety.html">3&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Improving the Stability of Type Safety Proofs in Dafny&lt;/b>.
 Joseph&amp;nbsp;W. Cutler, Michael Hicks, and Emina Torlak, January 2024.
 Dafny Workshop talk.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;h3>2023&lt;/h3>
&lt;table>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hietala22voqc-journal">&lt;a href="hietala22voqc-journal.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>A Verified Optimizer for Quantum Circuits&lt;/b>.
 Kesha Hietala, Robert Rand, Liyi Li, Shih-Han Hung, Xiaodi Wu, and
 Michael Hicks.
 &lt;em>ACM Transactions on Programming Languages and Systems
 (TOPLAS)&lt;/em>, 45(3), September 2023.
 Extends POPL'21 paper.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="peng2022shors">&lt;a href="peng2022shors.html">2&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>A Formally Certified End-to-End Implementation of Shor's Factorization
 Algorithm&lt;/b>.
 Yuxiang Peng, Kesha Hietala, Runzhou Tao, Liyi Li, Robert Rand,
 Michael Hicks, and Xiaodi Wu.
 &lt;em>Proceedings of the National Academy of Sciences&lt;/em>, 120(21), May
 2023.
 Preprint at &lt;a href="https://arxiv.org/abs/2204.07112">https://arxiv.org/abs/2204.07112&lt;/a>.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="zhou23fatpointers">&lt;a href="zhou23fatpointers.html">3&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Fat Pointers for Temporal Memory Safety of C&lt;/b>.
 Jie Zhou, John Criswell, and Michael Hicks.
 In &lt;em>Proceedings of the ACM Conference on Object-Oriented
 Programming Languages, Systems, and Applications (OOPSLA)&lt;/em>, April 2023.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="deng23mqcc">&lt;a href="deng23mqcc.html">4&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Automating NISQ Application Design with Meta Quantum Circuits with
 Constraints (MQCC)&lt;/b>.
 Haowei Deng, Yuxiang Peng, Michael Hicks, and Xiaodi Wu.
 &lt;em>ACM Transactions on Quantum Computing (TQC)&lt;/em>, 4(3), April
 2023.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="zhang23fuzzoptions">&lt;a href="zhang23fuzzoptions.html">5&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Fuzzing Configurations of Program Options&lt;/b>.
 Zenong Zhang, George Klees, Eric Wang, Michael Hicks, and Shiyi Wei.
 &lt;em>ACM Transactions on Software Engineering and Methodology
 (TOSEM)&lt;/em>, 32(2), March 2023.
 A shorter version appeared at the 2022 Fuzzing Workshop.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="sweet23symphony">&lt;a href="sweet23symphony.html">6&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Symphony: Expressive Secure Multiparty Computation with Coordination&lt;/b>.
 Ian Sweet, David Darais, David Heath, Ryan Estes, Bill Harris, and
 Michael Hicks.
 &lt;em>&amp;lt;Programming&amp;gt;&lt;/em>, 7(14), February 2023.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="coblenz23rust">&lt;a href="coblenz23rust.html">7&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>A Multimodal Study of Challenges Using Rust&lt;/b>.
 Michael Coblenz, April Porter, Varun Das, Teja Nallagorla, and
 Michael Hicks.
 In &lt;em>Proceedings of the Workshop on the Evaluation and Usability
 of Programming Languages and Tools (PLATEAU)&lt;/em>, February 2023.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="voichick23qunity">&lt;a href="voichick23qunity.html">8&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Qunity: A Unified Language for Quantum and Classical Computing&lt;/b>.
 Finn Voichick, Liyi Li, Robert Rand, and Michael Hicks.
 In &lt;em>Proceedings of the ACM Conference on Principles of
 Programming Languages (POPL)&lt;/em>, January 2023.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;h3>2022&lt;/h3>
&lt;table>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="li2022verified">&lt;a href="li2022verified.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Verified Compilation of Quantum Oracles&lt;/b>.
 Liyi Li, Finnegan Voichick, Kesha Hietala, Yuxiang Peng, Xiaodi Wu,
 and Michael Hicks.
 In &lt;em>Proceedings of the ACM Conference on Object-Oriented
 Programming Languages, Systems, and Applications (OOPSLA)&lt;/em>, December 2022.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="machiry3c2022">&lt;a href="machiry3c2022.html">2&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>C to Checked C by 3C&lt;/b>.
 Aravind Machiry, John Kastner, Matt McCutchen, Aaron Eline, Kyle
 Headley, and Michael Hicks.
 In &lt;em>Proceedings of the ACM Conference on Object-Oriented
 Programming Languages, Systems, and Applications (OOPSLA)&lt;/em>, December 2022.
 &lt;b>Distinguished Paper&lt;/b>.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="fulton22contest">&lt;a href="fulton22contest.html">3&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Understanding the how and the why: Exploring secure development practices
 through a course competition&lt;/b>.
 Kelsey&amp;nbsp;R. Fulton, Daniel Votipka, Desiree Abrokwa, Michelle&amp;nbsp;L.
 Mazurek, Michael Hicks, and James Parker.
 In &lt;em>Proceedings of the ACM Conference on Computer and
 Communications Security (CCS)&lt;/em>, October 2022.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="li22checkedc">&lt;a href="li22checkedc.html">4&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>A Formal Model of Checked C&lt;/b>.
 Liyi Li, Yiyun Liu, Deena&amp;nbsp;L. Postol, Leonidas Lampropoulos, David&amp;nbsp;Van
 Horn, and Michael Hicks.
 In &lt;em>Proceedings of the Computer Security Foundations Symposium
 (CSF)&lt;/em>, August 2022.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="zhang22fixreverter">&lt;a href="zhang22fixreverter.html">5&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>FixReverter: A Realistic Bug Injection Methodology for Benchmarking Fuzz
 Testing&lt;/b>.
 Zenong Zhang, Zach Patterson, Michael Hicks, and Shiyi Wei.
 In &lt;em>Proceedings of the USENIX Security Symposium (USENIX SEC)&lt;/em>,
 August 2022.
 &lt;b>Distinguished Paper&lt;/b>.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="coblenz21bronze">&lt;a href="coblenz21bronze.html">6&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Does the Bronze Garbage Collector Make Rust Easier to Use? A Controlled
 Experiment&lt;/b>.
 Michael Coblenz, Michelle Mazurek, and Michael Hicks.
 In &lt;em>Proceedings of the International Conference on Software
 Engineering (ICSE)&lt;/em>, May 2022.
 &lt;b>Distinguished Paper Award Nominee&lt;/b>.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="zhang22configfuzz">&lt;a href="zhang22configfuzz.html">7&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Fuzzing Configurations of Program Options&lt;/b>.
 Zenong Zhang, George Klees, Eric Wang, Michael Hicks, and Shiyi Wei.
 In &lt;em>Proceedings of the International Fuzzing Workshop&lt;/em>, April
 2022.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;h3>2021&lt;/h3>
&lt;table>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="fulton21rust">&lt;a href="fulton21rust.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Benefits and Drawbacks of Adopting a Secure Programming Language: Rust
 as a Case Study&lt;/b>.
 Kelsey Fulton, Anna Chan, Dan Votipka, Michael Hicks, and Michelle
 Mazurek.
 In &lt;em>Proceedings of the Symposium on Usable Privacy and Security
 (SOUPS)&lt;/em>, August 2021.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="darais21symphony">&lt;a href="darais21symphony.html">2&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Symphony: A Concise Language Model for MPC&lt;/b>.
 Ian Sweet, David Darais, David Heath, Ryan Estes, William Harris, and
 Michael Hicks.
 In &lt;em>Informal Proceedings of the Workshop on Foundations on
 Computer Secuirty (FCS)&lt;/em>, June 2021.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hietala21qproof">&lt;a href="hietala21qproof.html">3&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Proving Quantum Programs Correct&lt;/b>.
 Kesha Hietala, Robert Rand, Shih-Han Hung, Liyi Li, and Michael
 Hicks.
 In &lt;em>Proceedings of the Conference on Interative Theorem Proving
 (ITP)&lt;/em>, June 2021.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="bhattacherjee21bullfrog">&lt;a href="bhattacherjee21bullfrog.html">4&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>BullFrog: Online Schema Evolution via Lazy Evaluation&lt;/b>.
 Souvik Bhattacherjee, Gang Liao, Michael Hicks, and Daniel&amp;nbsp;J. Abadi.
 In &lt;em>Proceedings of the ACM SIGMOD International Conference on
 Management of Data (SIGMOD)&lt;/em>, June 2021.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="voichick21qone">&lt;a href="voichick21qone.html">5&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Toward A Quantum Programming Language for Higher-Level Formal
 Verification&lt;/b>.
 Finn Voichick and Michael Hicks.
 In &lt;em>Informal Proceedings of the Workshop on Programming Languages
 and Quantum Computing (PLanQC)&lt;/em>, June 2021.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hietala21expvoqc">&lt;a href="hietala21expvoqc.html">6&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Applying and Expanding the VOQC Toolkit&lt;/b>.
 Kesha Hietala, Liyi Li, Akshaj Gaur, Aaron Green, Robert Rand, Xiaodi
 Wu, and Michael Hicks.
 In &lt;em>Informal Proceedings of the Workshop on Programming Languages
 and Quantum Computing (PLanQC)&lt;/em>, June 2021.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hietala21voqc">&lt;a href="hietala21voqc.html">7&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>A Verified Optimizer for Quantum Circuits&lt;/b>.
 Kesha Hietala, Robert Rand, Shih-Han Hung, Xiaodi Wu, and Michael
 Hicks.
 In &lt;em>Proceedings of the ACM Conference on Principles of
 Programming Languages (POPL)&lt;/em>, January 2021.
 &lt;b>Distinguished Paper&lt;/b>.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;h3>2020&lt;/h3>
&lt;table>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="trilla20probprog">&lt;a href="trilla20probprog.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Probabilistic Abstract Interpretation: Sound Inference and Application to
 Privacy&lt;/b>.
 Jose Manuel&amp;nbsp;Calder&amp;oacute;n Trilla, Michael Hicks, Stephen Magill, Piotr
 Mardziel, and Ian Sweet.
 In Gilles Barthe, Joost-Pieter Katoen, and Alexandra Silva, editors,
 &lt;em>Foundations of Probabilistic Programming&lt;/em>, chapter&amp;nbsp;11, pages 361--389.
 Cambridge University Press, November 2020.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="sweet20odsnotpmto">&lt;a href="sweet20odsnotpmto.html">2&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Short Paper: Probabilistically Almost-Oblivious Computation&lt;/b>.
 Ian Sweet, David Darais, and Michael Hicks.
 In &lt;em>Proceedings of the ACM SIGPLAN Workshop on Programming
 Languages and Analysis for Security (PLAS)&lt;/em>, November 2020.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="liu20typeclasses">&lt;a href="liu20typeclasses.html">3&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Verifying Replicated Data Types with Typeclass Refinements in Liquid
 Haskell&lt;/b>.
 Yiyun Liu, James Parker, Patrick Redmond, Lindsey Kuper, Michael
 Hicks, and Niki Vazou.
 In &lt;em>Proceedings of the ACM Conference on Object-Oriented
 Programming Languages, Systems, and Applications (OOPSLA)&lt;/em>, October 2020.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="votipka19bibifiqual">&lt;a href="votipka19bibifiqual.html">4&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Understanding security mistakes developers make: Qualitative analysis from
 Build It, Break It, Fix It&lt;/b>.
 Daniel Votipka, Kelsey Fulton, James Parker, Matthew Hou, Michelle&amp;nbsp;L.
 Mazurek, and Michael Hicks.
 In &lt;em>Proceedings of the USENIX Security Symposium (USENIX SEC)&lt;/em>,
 August 2020.
 &lt;b>Distinguished Paper&lt;/b>.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="parker20bibifi">&lt;a href="parker20bibifi.html">5&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Build It, Break It, Fix It: Contesting Secure Development&lt;/b>.
 James Parker, Michael Hicks, Andrew Ruef, Michelle&amp;nbsp;L. Mazurek, Dave
 Levin, Daniel Votipka, Piotr Mardziel, and Kelsey&amp;nbsp;R. Fulton.
 &lt;em>ACM Transactions on Privacy and Security (TOPS)&lt;/em>, 23(2), April
 2020.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="pierce20carbon">&lt;a href="pierce20carbon.html">6&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Conferences in an Era of Expensive Carbon&lt;/b>.
 Benjamin Pierce, Michael Hicks, Crista Lopes, and Jens Palsberg.
 &lt;em>Communications of the ACM&lt;/em>, March 2020.
 Preprint at &lt;a href="https://www.cs.umd.edu/~mwh/papers/co2acm.pdf">https://www.cs.umd.edu/~mwh/papers/co2acm.pdf&lt;/a>.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="darais20obliv">&lt;a href="darais20obliv.html">7&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>A Language for Probabilistically Oblivious Computation&lt;/b>.
 David Darais, Ian Sweet, Chang Liu, and Michael Hicks.
 In &lt;em>Proceedings of the ACM Conference on Principles of
 Programming Languages (POPL)&lt;/em>, January 2020.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="votipka20bibifilogin">&lt;a href="votipka20bibifilogin.html">8&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Build It, Break It, Fix It Contests: Motivated Developers Still Make
 Security Mistakes&lt;/b>.
 Daniel Votipka, Kelsey&amp;nbsp;R. Fulton, James Parker, Matthew Hou,
 Michelle&amp;nbsp;L. Mazurek, and Michael Hicks.
 &lt;em>;login;&lt;/em>, 45(4), winter 2020.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;h3>2019&lt;/h3>
&lt;table>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="lampropoulos19fuzzchick">&lt;a href="lampropoulos19fuzzchick.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Coverage Guided, Property Based Testing&lt;/b>.
 Leonidas Lampropoulos, Michael Hicks, and Benjamin&amp;nbsp;C. Pierce.
 In &lt;em>Proceedings of the ACM Conference on Object-Oriented
 Programming Languages, Systems, and Applications (OOPSLA)&lt;/em>, October 2019.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="ran19sqire">&lt;a href="ran19sqire.html">2&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Verified Optimization in a Quantum Intermediate Representation&lt;/b>.
 Kesha Hietala, Robert Rand, Shih-Han Hung, Xiaodi Wu, and Michael
 Hicks, June 2019.
 Extended abstract appeared at QPL 2019.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="rand19qplperspective">&lt;a href="rand19qplperspective.html">3&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Formal Verification vs. Quantum Uncertainty&lt;/b>.
 Robert Rand, Kesha Hietala, and Michael Hicks.
 In Benjamin&amp;nbsp;S. Lerner, Rastislav Bod&amp;iacute;k, and Shriram
 Krishnamurthi, editors, &lt;em>3rd Summit on Advances in Programming Languages
 (SNAPL 2019)&lt;/em>, volume 136 of &lt;em>Leibniz International Proceedings in
 Informatics (LIPIcs)&lt;/em>, pages 12:1--12:11, Dagstuhl, Germany, May 2019.
 Schloss Dagstuhl--Leibniz-Zentrum fuer Informatik.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="pina19mvedsua">&lt;a href="pina19mvedsua.html">4&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>MVEDSUa: Higher Availability Dynamic Software Updates via Multi-Version
 Execution&lt;/b>.
 Luis Pina, Anastasios Andronidis, Michael Hicks, and Cristian Cadar.
 In &lt;em>Proceedings of the International Conference on Architectural
 Support for Programming Languages and Operating Systems (ASPLOS)&lt;/em>, April
 2019.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="ruef18checkedc-incr">&lt;a href="ruef18checkedc-incr.html">5&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Achieving Safety Incrementally with Checked C&lt;/b>.
 Andrew Ruef, Leonidas Lampropoulos, Ian Sweet, David Tarditi, and
 Michael Hicks.
 In &lt;em>Proceedings of the Symposium on Principles of Security and
 Trust (POST)&lt;/em>, April 2019.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="wysstar18wysstar">&lt;a href="wysstar18wysstar.html">6&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Wys&lt;sup>*&lt;/sup>: A DSL for Verified Secure Multi-party Computations&lt;/b>.
 Aseem Rastogi, Nikhil Swamy, and Michael Hicks.
 In &lt;em>Proceedings of the Symposium on Principles of Security and
 Trust (POST)&lt;/em>, April 2019.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="parker19lweb">&lt;a href="parker19lweb.html">7&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>LWeb: Information Flow Security for Multi-Tier Web Applications&lt;/b>.
 James Parker, Niki Vazou, and Michael Hicks.
 In &lt;em>Proceedings of the ACM Conference on Principles of
 Programming Languages (POPL)&lt;/em>, January 2019.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hung19qrobust">&lt;a href="hung19qrobust.html">8&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Quantitative Robustness Analysis of Quantum Programs&lt;/b>.
 Shih-Han Hung, Kesha Hietala, Shaopeng Zhu, Mingsheng Ying, Michael
 Hicks, and Xiaodi Wu.
 In &lt;em>Proceedings of the ACM Conference on Principles of
 Programming Languages (POPL)&lt;/em>, January 2019.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;p>&lt;span style="font-size: 85%">Technical Reports&lt;/span>&lt;p>
&lt;table style="font-size: 85%">
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="darais19obliv">&lt;a href="darais19obliv.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>A Language for Probabilistically Oblivious Computation&lt;/b>.
 David Darais, Ian Sweet, Chang Liu, and Michael Hicks.
 Technical Report abs/1711.09305, CoRR, July 2019.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;h3>2018&lt;/h3>
&lt;table>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="klees2018fuzzeval">&lt;a href="klees2018fuzzeval.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Evaluating Fuzz Testing&lt;/b>.
 George&amp;nbsp;T. Klees, Andrew Ruef, Benjamin Cooper, Shiyi Wei, and Michael
 Hicks.
 In &lt;em>Proceedings of the ACM Conference on Computer and
 Communications Security (CCS)&lt;/em>, October 2018.
 Winner of the 7th NSA &lt;b>Best Scientific Cybersecurity Paper&lt;/b>
 competition.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="elliott18checkedc">&lt;a href="elliott18checkedc.html">2&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Checked C: Making C Safe by Extension&lt;/b>.
 Archibald&amp;nbsp;Samuel Elliott, Andrew Ruef, Michael Hicks, and David
 Tarditi.
 In &lt;em>Proceedings of the IEEE Conference on Secure Development
 (SecDev)&lt;/em>, September 2018.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="wei18evaluating">&lt;a href="wei18evaluating.html">3&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Evaluating Design Tradeoffs in Numeric Static Analysis for Java&lt;/b>.
 Shiyi Wei, Piotr Mardziel, Andrew Ruef, Jeffrey&amp;nbsp;S. Foster, and
 Michael Hicks.
 In &lt;em>Proceedings of the European Symposium on Programming (ESOP)&lt;/em>,
 April 2018.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="sweet18prob">&lt;a href="sweet18prob.html">4&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>What's the Over/Under? Probabilistic Bounds on Information Leakage&lt;/b>.
 Ian Sweet, Jos&amp;eacute; Manuel&amp;nbsp;Calder&amp;oacute;n Trilla, Chad Scherrer, Michael
 Hicks, and Stephen Magill.
 In &lt;em>Proceedings of the Symposium on Principles of Security and
 Trust (POST)&lt;/em>, April 2018.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;h3>2017&lt;/h3>
&lt;table>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hicks17plas">&lt;a href="hicks17plas.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Languages for Oblivious Computation&lt;/b>.
 Michael Hicks.
 In &lt;em>Proceedings of the ACM SIGPLAN Workshop on Programming
 Languages and Analysis for Security (PLAS)&lt;/em>, October 2017.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="ngyuen17numinv">&lt;a href="ngyuen17numinv.html">2&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>A Counterexample-guided Approach to Finding Numerical Invariants&lt;/b>.
 ThanhVu Nguyen, Timos Antopoulos, Andrew Ruef, and Michael Hicks.
 In &lt;em>Proceedings of the European Software Engineering Conference
 and the ACM SIGSOFT Symposium on the Foundations of Software Engineering
 (ESEC/FSE)&lt;/em>, September 2017.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="antopoulous17blazer">&lt;a href="antopoulous17blazer.html">3&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Decomposition Instead of Self-Composition for Proving the Absence of
 Timing Channels&lt;/b>.
 Timos Antonopoulos, Paul Gazzillo, Michael Hicks, Eric Koskinen,
 Tachio Terauchi, and Shiyi Wei.
 In &lt;em>Proceedings of the ACM Conference on Programming Language
 Design and Implementation (PLDI)&lt;/em>, June 2017.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="alvim17strat">&lt;a href="alvim17strat.html">4&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Quantifying vulnerability of secret generation using hyper-distributions&lt;/b>.
 M&amp;aacute;rio&amp;nbsp;S. Alvim, Piotr Mardziel, and Michael Hicks.
 In &lt;em>Proceedings of the Symposium on Principles of Security and
 Trust (POST)&lt;/em>, April 2017.
 Extended version of short paper that appeared at FCS 2016:
 &lt;a href="http://www.cs.umd.edu/~mwh/papers/stratquant.pdf">http://www.cs.umd.edu/~mwh/papers/stratquant.pdf&lt;/a>.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;p>&lt;span style="font-size: 85%">Technical Reports&lt;/span>&lt;p>
&lt;table style="font-size: 85%">
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="rastogi16wysstar">&lt;a href="rastogi16wysstar.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Wys&lt;sup>*&lt;/sup>: A Verified Language Extension for Secure Multi-Party
 Computations&lt;/b>.
 Aseem Rastogi, Nikhil Swamy, and Michael Hicks.
 Technical Report abs/1711.06467, CoRR, November 2017.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;h3>2016&lt;/h3>
&lt;table>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="saur16kvolve">&lt;a href="saur16kvolve.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Evolving NoSQL Databases Without Downtime&lt;/b>.
 Karla Saur, Tudor Dumitra&amp;#x015F;, and Michael Hicks.
 In &lt;em>Proceedings of the International Conference on Software
 Maintenance and Evolution (ICSME)&lt;/em>, October 2016.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="ruef2016bibifi">&lt;a href="ruef2016bibifi.html">2&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Build It, Break It, Fix It: Contesting Secure Development&lt;/b>.
 Andrew Ruef, Michael Hicks, James Parker, Dave Levin, Michelle&amp;nbsp;L.
 Mazurek, and Piotr Mardziel.
 In &lt;em>Proceedings of the ACM Conference on Computer and
 Communications Security (CCS)&lt;/em>, October 2016.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="pina16tedsuto">&lt;a href="pina16tedsuto.html">3&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Tedsuto: A General Framework for Testing Dynamic Software Updates&lt;/b>.
 Luis Pina and Michael Hicks.
 In &lt;em>Proceedings of the International Conference on Software
 Testing (ICST)&lt;/em>, April 2016.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="saur15morpheus">&lt;a href="saur15morpheus.html">4&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Safe and Flexible Controller Upgrades for SDNs&lt;/b>.
 Karla Saur, Joseph Collard, Nate Foster, Arjun Guha, Laurent
 Vanbever, and Michael Hicks.
 In &lt;em>Proceedings of the Symposium on SDN Research (SOSR)&lt;/em>, March
 2016.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;h3>2015&lt;/h3>
&lt;table>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hammer14nominal">&lt;a href="hammer14nominal.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Incremental Computation with Names&lt;/b>.
 Matthew Hammer, Kyle Headley, Nicholas Labich, Jeffrey&amp;nbsp;S. Foster,
 Michael Hicks, David&amp;nbsp;Van Horn, and Jana Dunfield.
 In &lt;em>Proceedings of the ACM Conference on Object-Oriented
 Programming Languages, Systems, and Applications (OOPSLA)&lt;/em>, October 2015.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="ruef15bibifi">&lt;a href="ruef15bibifi.html">2&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Build It Break It: Measuring and Comparing Development Security&lt;/b>.
 Andrew Ruef, Michael Hicks, James Parker, Dave Levin, Atif Memon,
 Jandelyn Plane, and Piotr Mardziel.
 In &lt;em>Proceedings of the USENIX Workshop on Cyber Security
 Instrumentation and Test (CSET)&lt;/em>, August 2015.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="saur15strider">&lt;a href="saur15strider.html">3&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>C-Strider: Type-Aware Heap Traversal for C&lt;/b>.
 Karla Saur, Michael Hicks, and Jeffrey&amp;nbsp;S. Foster.
 &lt;em>Software, Practice, and Experience&lt;/em>, May 2015.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="liu15ghostrider">&lt;a href="liu15ghostrider.html">4&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>GhostRider: A Hardware-Software System for Memory Trace Oblivious
 Computation&lt;/b>.
 Chang Liu, Austin Harris, Martin Maas, Michael Hicks, Mohit Tiwari,
 and Elaine Shi.
 In &lt;em>Proceedings of the International Conference on Architectural
 Support for Programming Languages and Operating Systems (ASPLOS)&lt;/em>, March
 2015.
 &lt;b>Winner of Best Paper Award&lt;/b>.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="barthe2015dagstuhl">&lt;a href="barthe2015dagstuhl.html">5&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>The Synergy Between Programming Languages and Cryptography (Dagstuhl
 Seminar 14492)&lt;/b>.
 Gilles Barthe, Michael Hicks, Florian Kerschbaum, and Dominique
 Unruh.
 &lt;em>Dagstuhl Reports&lt;/em>, 4(12):29--47, 2015.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="ruef15bibifiNW">&lt;a href="ruef15bibifiNW.html">6&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Build it, break it, fix it: Competing to build secure systems&lt;/b>.
 Andrew Ruef and Michael Hicks.
 &lt;em>The Next Wave&lt;/em>, 21(1):19--23, 2015.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;h3>2014&lt;/h3>
&lt;table>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hayden14kitsune-journal">&lt;a href="hayden14kitsune-journal.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Efficient, General-purpose Dynamic Software Updating for C&lt;/b>.
 Christopher&amp;nbsp;M. Hayden, Karla Saur, Edward&amp;nbsp;K. Smith, Michael Hicks,
 and Jeffrey&amp;nbsp;S. Foster.
 &lt;em>ACM Transactions on Programming Languages and Systems
 (TOPLAS)&lt;/em>, 36(4):13, October 2014.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="pina14rubah">&lt;a href="pina14rubah.html">2&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Rubah: DSU for Java on a stock JVM&lt;/b>.
 Lu&amp;iacute;s Pina, Lu&amp;iacute;s Veiga, and Michael Hicks.
 In &lt;em>Proceedings of the ACM Conference on Object-Oriented
 Programming Languages, Systems, and Applications (OOPSLA)&lt;/em>, October 2014.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="mardziel14qifgl">&lt;a href="mardziel14qifgl.html">3&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Adversary Gain vs. Defender Loss in Quantified Information Flow&lt;/b>.
 Piotr Mardziel, M&amp;aacute;rio&amp;nbsp;S. Alvim, and Michael Hicks.
 In &lt;em>(Unofficial) Proceedings of the International Workshop on
 Foundations of Computer Security (FCS)&lt;/em>, July 2014.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hammer13adapton">&lt;a href="hammer13adapton.html">4&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Adapton: Composable, Demand-Driven Incremental Computation&lt;/b>.
 Matthew Hammer, Yit&amp;nbsp;Phang Khoo, Michael Hicks, and Jeffrey&amp;nbsp;S. Foster.
 In &lt;em>Proceedings of the ACM Conference on Programming Language
 Design and Implementation (PLDI)&lt;/em>, June 2014.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="rastogi14wysteria">&lt;a href="rastogi14wysteria.html">5&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Wysteria: A Programming Language for Generic, Mixed-Mode Multiparty
 Computations&lt;/b>.
 Aseem Rastogi, Matthew&amp;nbsp;A. Hammer, and Michael Hicks.
 In &lt;em>Proceedings of the IEEE Symposium on Security and Privacy
 (Oakland)&lt;/em>, May 2014.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="mardziel14time">&lt;a href="mardziel14time.html">6&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Quantifying Information Flow for Dynamic Secrets&lt;/b>.
 Piotr Mardziel, Mario Alvim, Michael Hicks, and Michael Clarkson.
 In &lt;em>Proceedings of the IEEE Symposium on Security and Privacy
 (Oakland)&lt;/em>, May 2014.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="liu14scram">&lt;a href="liu14scram.html">7&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Automating Efficient RAM-Model Secure Computation&lt;/b>.
 Chang Liu, Yan Huang, Elaine Shi, Jonathan Katz, and Michael Hicks.
 In &lt;em>Proceedings of the IEEE Symposium on Security and Privacy
 (Oakland)&lt;/em>, May 2014.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hicks14polymonad">&lt;a href="hicks14polymonad.html">8&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Polymonadic Programming&lt;/b>.
 Michael Hicks, Gavin Bierman, Nataliya Guts, Daan Leijen, and Nikhil
 Swamy.
 In &lt;em>Proceedings of the Fifth Workshop on Mathematically
 Structured Functional Programming (MSFP)&lt;/em>, April 2014.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="miller14gpads">&lt;a href="miller14gpads.html">9&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Authenticated Data Structures, Generically&lt;/b>.
 Andrew Miller, Michael Hicks, Jonathan Katz, and Elaine Shi.
 In &lt;em>Proceedings of the ACM Conference on Principles of
 Programming Languages (POPL)&lt;/em>, January 2014.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;p>&lt;span style="font-size: 85%">Technical Reports&lt;/span>&lt;p>
&lt;table style="font-size: 85%">
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="rastogi14wysteriaTR">&lt;a href="rastogi14wysteriaTR.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Wysteria: A Programming Language for Generic, Mixed-Mode Multiparty
 Computations (extended version)&lt;/b>.
 Aseem Rastogi, Matthew&amp;nbsp;A. Hammer, and Michael Hicks.
 Technical Report CS-TR-5034, Department of Computer Science, the
 University of Maryland, College Park, May 2014.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="mardziel14timeTR">&lt;a href="mardziel14timeTR.html">2&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Quantifying Information Flow for Dynamic Secrets (extended version)&lt;/b>.
 Piotr Mardziel, Mario Alvim, Michael Hicks, and Michael Clarkson.
 Technical Report CS-TR-5035, Department of Computer Science, the
 University of Maryland, College Park, May 2014.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;h3>2013&lt;/h3>
&lt;table>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="khoo13expositor-journal">&lt;a href="khoo13expositor-journal.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Expositor: Scriptable Time-Travel Debugging with First Class Traces (Full
 version)&lt;/b>.
 Yit&amp;nbsp;Phang Khoo, Jeffrey&amp;nbsp;S. Foster, and Michael Hicks, December 2013.
 Extended version of ICSE'13 paper.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="mardziel13belieflong">&lt;a href="mardziel13belieflong.html">2&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Dynamic Enforcement of Knowledge-based Security Policies using
 Probabilistic Abstract Interpretation&lt;/b>.
 Piotr Mardziel, Stephen Magill, Michael Hicks, and Mudhakar Srivatsa.
 &lt;em>Journal of Computer Security&lt;/em>, 21:463--532, October 2013.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="mardziel13belief">&lt;a href="mardziel13belief.html">3&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Knowledge inference for optimizing and enforcing secure computations&lt;/b>.
 Piotr Mardziel, Michael Hicks, Jonathan Katz, Matthew Hammer, Aseem
 Rastogi, and Mudhakar Srivatsa.
 In &lt;em>Proceedings of the Annual Meeting of the US/UK International
 Technology Alliance&lt;/em>, September 2013.
 This short paper consists of coherent excerpts from several prior
 papers.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="rastogi13knowledge">&lt;a href="rastogi13knowledge.html">4&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Knowledge Inference for Optimizing Secure Multi-party Computation&lt;/b>.
 Aseem Rastogi, Piotr Mardziel, Matthew Hammer, and Michael Hicks.
 In &lt;em>Proceedings of the ACM SIGPLAN Workshop on Programming
 Languages and Analysis for Security (PLAS)&lt;/em>, June 2013.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="liu13oblivious">&lt;a href="liu13oblivious.html">5&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Memory Trace Oblivious Program Execution&lt;/b>.
 Chang Liu, Michael Hicks, and Elaine Shi.
 In &lt;em>Proceedings of the Computer Security Foundations Symposium
 (CSF)&lt;/em>, June 2013.
 Winner of the 2nd NSA &lt;b>Best Scientific Cybersecurity Paper&lt;/b>
 competition.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="pina13rubah">&lt;a href="pina13rubah.html">6&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Rubah: Efficient, General-purpose Dynamic Software Updating for Java&lt;/b>.
 Luis Pina and Michael Hicks.
 In &lt;em>Proceedings of the Workshop on Hot Topics in Software
 Upgrades (HotSWUp)&lt;/em>, June 2013.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="khoo13expositor">&lt;a href="khoo13expositor.html">7&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Expositor: Scriptable Time-Travel Debugging with First Class Traces&lt;/b>.
 Yit&amp;nbsp;Phang Khoo, Jeffrey&amp;nbsp;S. Foster, and Michael Hicks.
 In &lt;em>Proceedings of the International Conference on Software
 Engineering (ICSE)&lt;/em>, May 2013.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;p>&lt;span style="font-size: 85%">Technical Reports&lt;/span>&lt;p>
&lt;table style="font-size: 85%">
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hammer13adaptontr">&lt;a href="hammer13adaptontr.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Adapton: Composable, Demand-Driven Incremental Computation&lt;/b>.
 Matthew Hammer, Yit&amp;nbsp;Phang Khoo, Michael Hicks, and Jeffrey&amp;nbsp;S. Foster.
 Technical Report CS-TR-5027, Department of Computer Science, the
 University of Maryland, College Park, July 2013.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="khoo13cs-tr-5021">&lt;a href="khoo13cs-tr-5021.html">2&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Expositor: Scriptable Time-Travel Debugging with First-Class Traces&lt;/b>.
 Yit&amp;nbsp;Phang Khoo, Jeffrey&amp;nbsp;S. Foster, and Michael Hicks.
 Technical Report CS-TR-5021, Department of Computer Science,
 University of Maryland, College Park, February 2013.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;h3>2012&lt;/h3>
&lt;table>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hayden12testing-journal">&lt;a href="hayden12testing-journal.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Evaluating Dynamic Software Update Safety Using Efficient Systematic
 Testing&lt;/b>.
 Christopher&amp;nbsp;M. Hayden, Edward&amp;nbsp;K. Smith, Eric&amp;nbsp;A. Hardisty, Michael
 Hicks, and Jeffrey&amp;nbsp;S. Foster.
 &lt;em>IEEE Transactions on Software Engineering&lt;/em>, 38(6):1340--1354,
 December 2012.
 Accepted September 2011.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="magill12tos">&lt;a href="magill12tos.html">2&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Automating Object Transformations for Dynamic Software Updating&lt;/b>.
 Stephen Magill, Michael Hicks, Suriya Subramanian, and Kathryn&amp;nbsp;S.
 McKinley.
 In &lt;em>Proceedings of the ACM Conference on Object-Oriented
 Programming Languages, Systems, and Applications (OOPSLA)&lt;/em>, October 2012.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hayden12kitsune">&lt;a href="hayden12kitsune.html">3&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Kitsune: Efficient, General-purpose Dynamic Software Updating for C&lt;/b>.
 Christopher&amp;nbsp;M. Hayden, Edward&amp;nbsp;K. Smith, Michail Denchev, Michael
 Hicks, and Jeffrey&amp;nbsp;S. Foster.
 In &lt;em>Proceedings of the ACM Conference on Object-Oriented
 Programming Languages, Systems, and Applications (OOPSLA)&lt;/em>, October 2012.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="srivatsa12mobility">&lt;a href="srivatsa12mobility.html">4&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Deanonymizing Mobility Traces: Using a Social Network as a Side-Channel&lt;/b>.
 Mudhakar Srivatsa and Michael Hicks.
 In &lt;em>Proceedings of the ACM Conference on Computer and
 Communications Security (CCS)&lt;/em>, October 2012.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="smith12benchmark">&lt;a href="smith12benchmark.html">5&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Towards Standardized Benchmarks for Dynamic Software Updating Systems&lt;/b>.
 Edward&amp;nbsp;K. Smith, Michael Hicks, and Jeffrey&amp;nbsp;S. Foster.
 In &lt;em>Proceedings of the Workshop on Hot Topics in Software
 Upgrades (HotSWUp)&lt;/em>, pages 11--15, June 2012.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hayden12quiescence">&lt;a href="hayden12quiescence.html">6&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>A Study of Dynamic Software Update Quiescence for Multithreaded Programs&lt;/b>.
 Christopher&amp;nbsp;M. Hayden, Karla Saur, Michael Hicks, and Jeffrey&amp;nbsp;S.
 Foster.
 In &lt;em>Proceedings of the Workshop on Hot Topics in Software
 Upgrades (HotSWUp)&lt;/em>, pages 6--10, June 2012.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="mardziel12smc">&lt;a href="mardziel12smc.html">7&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Knowledge-Oriented Secure Multiparty Computation&lt;/b>.
 Piotr Mardziel, Michael Hicks, Jonathan Katz, and Mudhakar Srivatsa.
 In &lt;em>Proceedings of the ACM SIGPLAN Workshop on Programming
 Languages and Analysis for Security (PLAS)&lt;/em>, June 2012.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hicks12popl">&lt;a href="hicks12popl.html">8&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>POPL'12 Program Chair's Report (or, how to run a medium-sized
 conference)&lt;/b>.
 Michael Hicks.
 &lt;em>SIGPLAN Notices&lt;/em>, 47(4), April 2012.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hayden12dsucorrect">&lt;a href="hayden12dsucorrect.html">9&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Specifying and Verifying the Correctness of Dynamic Software Updates&lt;/b>.
 Christopher&amp;nbsp;M. Hayden, Stephen Magill, Michael Hicks, Nate Foster,
 and Jeffrey&amp;nbsp;S. Foster.
 In &lt;em>Proceedings of the International Conference on Verified
 Software: Theories, Tools, and Experiments (VSTTE)&lt;/em>, pages 278--293,
 January 2012.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;p>&lt;span style="font-size: 85%">Technical Reports&lt;/span>&lt;p>
&lt;table style="font-size: 85%">
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hicks12polymonadTR">&lt;a href="hicks12polymonadTR.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Polymonads&lt;/b>.
 Nataliya Guts, Michael Hicks, Nikhil Swamy, Daan Leijen, and Gavin
 Bierman.
 Technical Report XXX, University of Maryland Department of Computer
 Science, July 2012.
 Extended version of POPL'13 submission.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;h3>2011&lt;/h3>
&lt;table>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="swamy11monad">&lt;a href="swamy11monad.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Lightweight Monadic Programming in ML&lt;/b>.
 Nikhil Swamy, Nataliya Guts, Daan Leijen, and Michael Hicks.
 In &lt;em>Proceedings of the ACM International Conference on
 Functional Programming (ICFP)&lt;/em>, pages 15--27, September 2011.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="ma11directed">&lt;a href="ma11directed.html">2&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Directed Symbolic Execution&lt;/b>.
 Kin-Keung Ma, Yit&amp;nbsp;Phang Khoo, Jeffrey&amp;nbsp;S. Foster, and Michael Hicks.
 In Eran Yahav, editor, &lt;em>Proceedings of the Static Analysis
 Symposium (SAS)&lt;/em>, volume 6887 of &lt;em>Lecture Notes in Computer Science&lt;/em>,
 pages 95--111. Springer, September 2011.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="guts11coco">&lt;a href="guts11coco.html">3&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>A demo of Coco: a compiler for monadic coercions in ML&lt;/b>.
 Nataliya Guts, Michael Hicks, Nikhil Swamy, and Daan Leijen.
 In &lt;em>Informal proceedings of the ML Workshop&lt;/em>, September 2011.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="mardziel11belief">&lt;a href="mardziel11belief.html">4&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Dynamic Enforcement of Knowledge-based Security Policies&lt;/b>.
 Piotr Mardziel, Stephen Magill, Michael Hicks, and Mudhakar Srivatsa.
 In &lt;em>Proceedings of the Computer Security Foundations Symposium
 (CSF)&lt;/em>, pages 114--128, June 2011.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hayden2011xfer">&lt;a href="hayden2011xfer.html">5&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>State Transfer for Clear and Efficient Runtime Upgrades&lt;/b>.
 Christopher&amp;nbsp;M. Hayden, Edward&amp;nbsp;K. Smith, Michael Hicks, and Jeffrey&amp;nbsp;S.
 Foster.
 In &lt;em>Proceedings of the Workshop on Hot Topics in Software
 Upgrades (HotSWUp)&lt;/em>, pages 179--184, April 2011.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="pratikakis11locksmith">&lt;a href="pratikakis11locksmith.html">6&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Locksmith: Practical Static Race Detection for C&lt;/b>.
 Polyvios Pratikakis, Jeffrey&amp;nbsp;S. Foster, and Michael Hicks.
 &lt;em>ACM Transactions on Programming Languages and Systems
 (TOPLAS)&lt;/em>, 33(1):Article 3, January 2011.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="an11rubydust">&lt;a href="an11rubydust.html">7&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Dynamic Inference of Static Types for Ruby&lt;/b>.
 Jong hoon (David)&amp;nbsp;An, Avik Chaudhuri, Jeffrey&amp;nbsp;S. Foster, and Michael
 Hicks.
 In &lt;em>Proceedings of the ACM Conference on Principles of
 Programming Languages (POPL)&lt;/em>, pages 459--472, January 2011.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="an2011position">&lt;a href="an2011position.html">8&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Position Paper: Dynamically Inferred Types for Dynamic Languages&lt;/b>.
 Jong hoon (David)&amp;nbsp;An, Avik Chaudhuri, Jeffrey&amp;nbsp;S. Foster, and Michael
 Hicks.
 In &lt;em>Proceedings of the Workshop on Scripts to Programs (STOP)&lt;/em>,
 January 2011.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;p>&lt;span style="font-size: 85%">Technical Reports&lt;/span>&lt;p>
&lt;table style="font-size: 85%">
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hayden11dsucorrectTR">&lt;a href="hayden11dsucorrectTR.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Specifying and Verifying the Correctness of Dynamic Software Updates&lt;/b>.
 Christopher&amp;nbsp;M. Hayden, Stephen Magill, Michael Hicks, Nate Foster,
 and Jeffrey&amp;nbsp;S. Foster.
 Technical Report CS-TR-4997, University of Maryland Department of
 Computer Science, November 2011.
 Extended version of VSTTE'12 paper with proofs of theorems and
 additional discussion.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hayden11testing-TR">&lt;a href="hayden11testing-TR.html">2&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Evaluating Dynamic Software Update Safety Using Efficient Systematic
 Testing&lt;/b>.
 Christopher&amp;nbsp;M. Hayden, Edward&amp;nbsp;K. Smith, Eric&amp;nbsp;A. Hardisty, Michael
 Hicks, and Jeffrey&amp;nbsp;S. Foster.
 Technical Report CS-TR-4993, University of Maryland, Department of
 Computer Science, September 2011.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="turpie11multiotter">&lt;a href="turpie11multiotter.html">3&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>MultiOtter: Multiprocess Symbolic Execution&lt;/b>.
 Jonathan Turpie, Elnatan Reisner, Jeffrey&amp;nbsp;S. Foster, and Michael
 Hicks.
 Technical Report CS-TR-4982, University of Maryland Department of
 Computer Science, August 2011.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="mardziel11beliefTR">&lt;a href="mardziel11beliefTR.html">4&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Dynamic Enforcement of Knowledge-based Security Policies&lt;/b>.
 Piotr Mardziel, Stephen Magill, Michael Hicks, and Mudhakar Srivatsa.
 Technical Report CS-TR-4978, University of Maryland Department of
 Computer Science, July 2011.
 Extended version with proofs and additional benchmarks.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="swamy11monadTR">&lt;a href="swamy11monadTR.html">5&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Lightweight Monadic Programming in ML&lt;/b>.
 Nikhil Swamy, Nataliya Guts, Daan Leijen, and Michael Hicks.
 Technical Report MSR-TR-2011-039, Microsoft Research, May 2011.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="ma11directedTR">&lt;a href="ma11directedTR.html">6&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Directed Symbolic Execution&lt;/b>.
 Kin-Keung Ma, Yit&amp;nbsp;Phang Khoo, Jeffrey&amp;nbsp;S. Foster, and Michael Hicks.
 Technical Report CS-TR-4979, University of Maryland Department of
 Computer Science, April 2011.
 Extended version contains refinements and further experimental
 analysis.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;h3>2010&lt;/h3>
&lt;table>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hicks10scoreshort">&lt;a href="hicks10scoreshort.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Score: Agile Research Group Management&lt;/b>.
 Michael Hicks and Jeffrey&amp;nbsp;S. Foster.
 &lt;em>Communications of the ACM&lt;/em>, 53(10):30--31, October 2010.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="mardziel10acita">&lt;a href="mardziel10acita.html">2&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Secure sharing in distributed information management applications:
 problems and directions&lt;/b>.
 Piotr Mardziel, Adam Bender, Michael Hicks, Dave Levin, Mudhakar
 Srivatsa, and Jonathan Katz.
 In &lt;em>Proceedings of the Annual Conference of the International
 Technology Alliance (ACITA)&lt;/em>, September 2010.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="meister10cir">&lt;a href="meister10cir.html">3&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Serializing C intermediate representations for efficient and portable
 parsing&lt;/b>.
 Jeffrey&amp;nbsp;A. Meister, Jeffrey&amp;nbsp;S. Foster, and Michael Hicks.
 &lt;em>Software, Practice, and Experience&lt;/em>, 40(3):225--238, February
 2010.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="martin10ownership">&lt;a href="martin10ownership.html">4&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Dynamically Checking Ownership Policies in Concurrent C/C++ Programs&lt;/b>.
 Jean-Philippe Martin, Michael Hicks, Manuel Costa, Periklis
 Akritidis, and Miguel Castro.
 In &lt;em>Proceedings of the ACM Conference on Principles of
 Programming Languages (POPL)&lt;/em>, pages 457--470, January 2010.
 Full version.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;p>&lt;span style="font-size: 85%">Technical Reports&lt;/span>&lt;p>
&lt;table style="font-size: 85%">
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hicks10score">&lt;a href="hicks10score.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Adapting Scrum to Managing a Research Group&lt;/b>.
 Michael Hicks and Jeffrey&amp;nbsp;S. Foster.
 Technical Report CS-TR-4966, University of Maryland, Department of
 Computer Science, September 2010.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="an10rubydustTR">&lt;a href="an10rubydustTR.html">2&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Dynamic Inference of Static Types for Ruby&lt;/b>.
 Jong hoon (David)&amp;nbsp;An, Avik Chaudhuri, Jeffrey&amp;nbsp;S. Foster, and Michael
 Hicks.
 Technical Report CS-TR-4965, University of Maryland Department of
 Computer Science, July 2010.
 Extended version contains proofs of theorems.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;h3>2009&lt;/h3>
&lt;table>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="khoo09arrowlets">&lt;a href="khoo09arrowlets.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Directing JavaScript with Arrows&lt;/b>.
 Yit&amp;nbsp;Phang Khoo, Michael Hicks, Jeffrey&amp;nbsp;S. Foster, and Vibha Sazawal.
 In &lt;em>Proceedings of the ACM SIGPLAN Dynamic Languages
 Symposium (DLS)&lt;/em>, pages 49--58, October 2009.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="furr09ril">&lt;a href="furr09ril.html">2&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>The Ruby Intermediate Language&lt;/b>.
 Michael Furr, Jong hoon (David)&amp;nbsp;An, Jeffrey&amp;nbsp;S. Foster, and Michael
 Hicks.
 In &lt;em>Proceedings of the ACM SIGPLAN Dynamic Languages
 Symposium (DLS)&lt;/em>, pages 89--98, October 2009.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="khoo09checklist">&lt;a href="khoo09checklist.html">3&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Triaging Checklists: a Substitute for a PhD in Static Analysis&lt;/b>.
 Yit&amp;nbsp;Phang Khoo, Jeffrey&amp;nbsp;S. Foster, Michael Hicks, and Vibha Sazawal.
 In &lt;em>Proceedings of the Workshop on the Evaluation and Usability
 of Programming Languages and Tools (PLATEAU)&lt;/em>, October 2009.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hayden09testing">&lt;a href="hayden09testing.html">4&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Efficient Systematic Testing for Dynamically Updatable Software&lt;/b>.
 Christopher&amp;nbsp;M. Hayden, Eric&amp;nbsp;A. Hardisty, Michael Hicks, and
 Jeffrey&amp;nbsp;S. Foster.
 In &lt;em>Proceedings of the Workshop on Hot Topics in Software
 Upgrades (HotSWUp)&lt;/em>, October 2009.
 Invited article.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="papageorgiou09mgrp">&lt;a href="papageorgiou09mgrp.html">5&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Passive Aggressive Measurement with MGRP&lt;/b>.
 Pavlos Papageorge, Justin McCann, and Michael Hicks.
 In &lt;em>Proceedings of the ACM SIGCOMM Conference on
 Applications, Technologies, Architectures, and Protocols for Computer
 Communications (SIGCOMM)&lt;/em>, pages 279--290, August 2009.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="swamy09coercion">&lt;a href="swamy09coercion.html">6&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>A Theory of Typed Coercions and its Applications&lt;/b>.
 Nikhil Swamy, Michael Hicks, and Gavin&amp;nbsp;S. Bierman.
 In &lt;em>Proceedings of the ACM International Conference on
 Functional Programming (ICFP)&lt;/em>, pages 329--340, August 2009.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="furr09stop">&lt;a href="furr09stop.html">7&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Tests to the Left of Me, Types to the Right: How Not to Get Stuck in the
 Middle of a Ruby Execution (A Demo of Diamondback Ruby)&lt;/b>.
 Michael Furr, Jong hoon (David)&amp;nbsp;An, Jeffrey&amp;nbsp;S. Foster, and Michael
 Hicks.
 In &lt;em>Proceedings of the Workshop on Scripts to Programs (STOP)&lt;/em>,
 July 2009.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="corcoran09selinks">&lt;a href="corcoran09selinks.html">8&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Cross-tier, Label-based Security Enforcement for Web Applications&lt;/b>.
 Brian&amp;nbsp;J. Corcoran, Nikhil Swamy, and Michael Hicks.
 In &lt;em>Proceedings of the ACM SIGMOD International Conference on
 Management of Data (SIGMOD)&lt;/em>, pages 269--282, June 2009.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="subramanian09jvolve">&lt;a href="subramanian09jvolve.html">9&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Dynamic Software Updates: A VM-Centric Approach&lt;/b>.
 Suriya Subramanian, Michael Hicks, and Kathryn&amp;nbsp;S. McKinley.
 In &lt;em>Proceedings of the ACM Conference on Programming Language
 Design and Implementation (PLDI)&lt;/em>, pages 1--12, June 2009.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="neamtiu09stump">&lt;a href="neamtiu09stump.html">10&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Safe and Timely Dynamic Updates for Multi-threaded Programs&lt;/b>.
 Iulian Neamtiu and Michael Hicks.
 In &lt;em>Proceedings of the ACM Conference on Programming Language
 Design and Implementation (PLDI)&lt;/em>, pages 13--24, June 2009.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="furr08druby">&lt;a href="furr08druby.html">11&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Static Type Inference for Ruby&lt;/b>.
 Michael Furr, Jong hoon (David)&amp;nbsp;An, Jeffrey&amp;nbsp;S. Foster, and Michael
 Hicks.
 In &lt;em>Proceedings of the ACM Symposium on Applied Computing,
 Object-oriented Programming Languages and Systems Track (OOPS)&lt;/em>, pages
 1859--1866, March 2009.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;p>&lt;span style="font-size: 85%">Technical Reports&lt;/span>&lt;p>
&lt;table style="font-size: 85%">
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hayden09testingTR">&lt;a href="hayden09testingTR.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>A Testing Based Empirical Study of Dynamic Software Update Safety
 Restrictions&lt;/b>.
 Christopher&amp;nbsp;M. Hayden, Eric&amp;nbsp;A. Hardisty, Michael Hicks, and
 Jeffrey&amp;nbsp;S. Foster.
 Technical Report CS-TR-4949, University of Maryland, Department of
 Computer Science, November 2009.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;h3>2008&lt;/h3>
&lt;table>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="king08implicit">&lt;a href="king08implicit.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Implicit Flows: Can't live with 'em, can't live without 'em&lt;/b>.
 Dave King, Boniface Hicks, Michael Hicks, and Trent Jaeger.
 In R.&amp;nbsp;Sekar and Arun&amp;nbsp;K. Pujari, editors, &lt;em>Proceedings of the
 International Conference on Information Systems Security (ICISS)&lt;/em>, volume
 5352 of &lt;em>Lecture Notes in Computer Science&lt;/em>, pages 56--70. Springer,
 December 2008.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="khoo08pathproj">&lt;a href="khoo08pathproj.html">2&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Path Projection for User-Centered Static Analysis Tools&lt;/b>.
 Yit&amp;nbsp;Phang Khoo, Jeffrey&amp;nbsp;S. Foster, Michael Hicks, and Vibha Sazawal.
 In &lt;em>Proceedings of the ACM Workshop on Program Analysis for
 Software Tools and Engineering (PASTE)&lt;/em>, pages 57--63, November 2008.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="khoo08jsarrows">&lt;a href="khoo08jsarrows.html">3&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Directing JavaScript with Arrows (poster summary)&lt;/b>.
 Yit&amp;nbsp;Phang Khoo, Michael Hicks, Jeffrey&amp;nbsp;S. Foster, and Vibha Sazawal.
 In &lt;em>Poster Proceedings of the ACM International Conference on
 Functional Programming (ICFP)&lt;/em>, September 2008.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="pratikakis08context">&lt;a href="pratikakis08context.html">4&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Formalizing Soundness of Contextual Effects&lt;/b>.
 Polyvios Pratikakis, Jeffrey&amp;nbsp;S. Foster, Michael Hicks, and Iulian
 Neamtiu.
 In Otmane&amp;nbsp;A&amp;iuml;t Mohamed, C&amp;eacute;sar Mun&amp;#x0304;oz, and Sofi&amp;egrave;ne Tahar,
 editors, &lt;em>Proceedings of the International Conference on Theorem Proving
 in Higher Order Logics (TPHOLs)&lt;/em>, volume 5170 of &lt;em>Lecture Notes in
 Computer Science&lt;/em>, pages 262--277. Springer, August 2008.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="SewellSHBW07">&lt;a href="SewellSHBW07.html">5&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Dynamic Rebinding for Marshalling and Update, via Redex-time and
 Destruct-time Reduction&lt;/b>.
 Peter Sewell, Gareth Stoyle, Michael Hicks, Gavin Bierman, and Keith
 Wansbrough.
 &lt;em>Journal of Functional Programming (JFP)&lt;/em>, 18(4):437--502, July
 2008.
 Appeared on-line October, 2007. Supercedes ICFP 2003 and USE 2003
 papers.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="swamy08air">&lt;a href="swamy08air.html">6&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Verified Enforcement of Stateful Information Release Policies&lt;/b>.
 Nikhil Swamy and Michael Hicks.
 In &lt;em>Proceedings of the ACM SIGPLAN Workshop on Programming
 Languages and Analysis for Security (PLAS)&lt;/em>, pages 21--32, June 2008.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="srivastava08cmodjournal">&lt;a href="srivastava08cmodjournal.html">7&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Modular Information Hiding and Type Safe Linking for C&lt;/b>.
 Saurabh Srivastava, Michael Hicks, Jeffrey&amp;nbsp;S. Foster, and Patrick
 Jenkins.
 &lt;em>IEEE Transactions on Software Engineering&lt;/em>, 34(3):1--20, May
 2008.
 Full version of TLDI 07 paper.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="swamy08fable">&lt;a href="swamy08fable.html">8&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Fable: A Language for Enforcing User-defined Security Policies&lt;/b>.
 Nikhil Swamy, Brian Corcoran, and Michael Hicks.
 In &lt;em>Proceedings of the IEEE Symposium on Security and Privacy
 (Oakland)&lt;/em>, pages 369--383, May 2008.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="neamtiu08context">&lt;a href="neamtiu08context.html">9&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Contextual Effects for Version-Consistent Dynamic Software Updating and
 Safe Concurrent Programming&lt;/b>.
 Iulian Neamtiu, Michael Hicks, Jeffrey&amp;nbsp;S. Foster, and Polyvios
 Pratikakis.
 In &lt;em>Proceedings of the ACM Conference on Principles of
 Programming Languages (POPL)&lt;/em>, pages 37--50, January 2008.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;p>&lt;span style="font-size: 85%">Technical Reports&lt;/span>&lt;p>
&lt;table style="font-size: 85%">
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="khoo08pathprojtr">&lt;a href="khoo08pathprojtr.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Path Projection for User-Centered Static Analysis Tools (long version)&lt;/b>.
 Yit&amp;nbsp;Phang Khoo, Jeffrey&amp;nbsp;S. Foster, Michael Hicks, and Vibha Sazawal.
 Technical Report CS-TR-4919, University of Maryland, Department of
 Computer Science, August 2008.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="khoo08jsarrowstr">&lt;a href="khoo08jsarrowstr.html">2&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Directing JavaScript with Arrows (Functional Pearl)&lt;/b>.
 Yit&amp;nbsp;Phang Khoo, Michael Hicks, Jeffrey&amp;nbsp;S. Foster, and Vibha Sazawal.
 Technical Report CS-TR-4923, University of Maryland, Department of
 Computer Science, August 2008.
 Extended version of ICFP 2008 poster.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="swamy08airTR">&lt;a href="swamy08airTR.html">3&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Verified Enforcement of Automaton-based Information Release Policies&lt;/b>.
 Nikhil Swamy and Michael Hicks.
 Technical Report CS-TR-4906, University of Maryland, Department of
 Computer Science, 2008.
 Full version of PLAS 08 paper.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;h3>2007&lt;/h3>
&lt;table>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="corcoran07provenance">&lt;a href="corcoran07provenance.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Combining Provenance and Security Policies in a Web-based Document
 Management System&lt;/b>.
 Brian Corcoran, Nikhil Swamy, and Michael Hicks.
 In &lt;em>On-line Proceedings of the Workshop on Principles of
 Provenance (PrOPr)&lt;/em>, November 2007.
 &lt;a href="http://homepages.inf.ed.ac.uk/jcheney/propr/">http://homepages.inf.ed.ac.uk/jcheney/propr/&lt;/a>.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="petroni07sbcfi">&lt;a href="petroni07sbcfi.html">2&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Automated Detection of Persistent Kernel Control-Flow Attacks&lt;/b>.
 Nick&amp;nbsp;L. Petroni, Jr. and Michael Hicks.
 In &lt;em>Proceedings of the ACM Conference on Computer and
 Communications Security (CCS)&lt;/em>, pages 103--115, October 2007.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="swamy07milcom">&lt;a href="swamy07milcom.html">3&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Verified Enforcement of Security Policies for Cross-Domain Information
 Flows&lt;/b>.
 Nikhil Swamy, Michael Hicks, and Simon Tsang.
 In &lt;em>Proceedings of the 2007 Military Communications Conference
 (MILCOM)&lt;/em>, October 2007.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="StoyleHBSN06">&lt;a href="StoyleHBSN06.html">4&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>&lt;em>Mutatis Mutandis&lt;/em>: Safe and Flexible Dynamic Software Updating (full
 version)&lt;/b>.
 Gareth Stoyle, Michael Hicks, Gavin Bierman, Peter Sewell, and Iulian
 Neamtiu.
 &lt;em>ACM Transactions on Programming Languages and Systems
 (TOPLAS)&lt;/em>, 29(4), August 2007.
 Full version of POPL 05 paper.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="foster07improving">&lt;a href="foster07improving.html">5&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Improving Software Quality with Static Analysis&lt;/b>.
 Jeffrey&amp;nbsp;S. Foster, Michael&amp;nbsp;W. Hicks, and William Pugh.
 In &lt;em>Proceedings of the ACM Workshop on Program Analysis for
 Software Tools and Engineering (PASTE)&lt;/em>, pages 83--84, June 2007.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="jim07beep">&lt;a href="jim07beep.html">6&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Defeating Scripting Attacks with Browser-Enforced Embedded Policies&lt;/b>.
 Trevor Jim, Nikhil Swamy, and Michael Hicks.
 In &lt;em>Proceedings of the International World Wide Web Conference
 (WWW)&lt;/em>, pages 601--610, May 2007.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="srivastava07cmod">&lt;a href="srivastava07cmod.html">7&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Modular Information Hiding and Type Safety for C&lt;/b>.
 Saurabh Srivastava, Michael Hicks, and Jeffrey&amp;nbsp;S. Foster.
 In &lt;em>Proceedings of the ACM Workshop on Types in Language Design
 and Implementation (TLDI)&lt;/em>, pages 3--14, January 2007.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;p>&lt;span style="font-size: 85%">Technical Reports&lt;/span>&lt;p>
&lt;table style="font-size: 85%">
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="swamy07fableTR">&lt;a href="swamy07fableTR.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Fable: A Language for Enforcing User-defined Security Policies&lt;/b>.
 Nikhil Swamy, Brian&amp;nbsp;J. Corcoran, and Michael Hicks.
 Technical Report CS-TR-4895, University of Maryland, Department of
 Computer Science, November 2007.
 Full version of Oakland 08 paper.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="petroni07sbcfitr">&lt;a href="petroni07sbcfitr.html">2&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Automated Detection of Persistent Kernel Control-Flow Attacks&lt;/b>.
 Nick&amp;nbsp;L. Petroni, Jr. and Michael Hicks.
 Technical Report CS-TR-4880, Department of Computer Science,
 University of Maryland, October 2007.
 Extends the CCS 2007 paper with more thorough performance results.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="MT-TR">&lt;a href="MT-TR.html">3&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Contextual Effects for Version-Consistent Dynamic Software Updating and
 Safe Concurrent Programming (extended version)&lt;/b>.
 Iulian Neamtiu, Michael Hicks, Jeffrey&amp;nbsp;S. Foster, and Polyvios
 Pratikakis.
 Technical Report CS-TR-4875, University of Maryland, Department of
 Computer Science, July 2007.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="srivastava07cmodjournaltr">&lt;a href="srivastava07cmodjournaltr.html">4&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Appendix to CMod: Modular Information Hiding and Type-Safe Linking for
 C&lt;/b>.
 Saurabh Srivastava, Michael Hicks, and Jeffrey&amp;nbsp;S. Foster.
 Technical Report CS-TR-4874, Department of Computer Science,
 University of Maryland, June 2007.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hicks07xdomtr">&lt;a href="hicks07xdomtr.html">5&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Toward Specifying and Validating Cross-Domain Policies&lt;/b>.
 Michael Hicks, Nikhil Swamy, and Simon Tsang.
 Technical Report CS-TR-4870, Department of Computer Science,
 University of Maryland, April 2007.
&lt;/td>
&lt;/tr>
&lt;/table>
&lt;h3>2006&lt;/h3>
&lt;table>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="swamy05experience">&lt;a href="swamy05experience.html">1&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Safe Manual Memory Management in Cyclone&lt;/b>.
 Nikhil Swamy, Michael Hicks, Greg Morrisett, Dan Grossman, and Trevor
 Jim.
 &lt;em>Science of Computer Programming (SCP)&lt;/em>, 62(2):122--144, October
 2006.
 Special issue on memory management. Expands ISMM conference paper of
 the same name.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="pratikakis06exists">&lt;a href="pratikakis06exists.html">2&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Existential Label Flow Inference via CFL Reachability&lt;/b>.
 Polyvios Pratikakis, Jeffrey&amp;nbsp;S. Foster, and Michael Hicks.
 In Kwangkeun Yi, editor, &lt;em>Proceedings of the Static Analysis
 Symposium (SAS)&lt;/em>, volume 4134 of &lt;em>Lecture Notes in Computer Science&lt;/em>,
 pages 88--106. Springer-Verlag, August 2006.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="swamy06rx">&lt;a href="swamy06rx.html">3&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Managing Policy Updates in Security-Typed Languages&lt;/b>.
 Nikhil Swamy, Michael Hicks, Stephen Tse, and Steve Zdancewic.
 In &lt;em>Proceedings of the Computer Security Foundations Workshop
 (CSFW)&lt;/em>, pages 202--216, July 2006.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="neamtiu06dsu">&lt;a href="neamtiu06dsu.html">4&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Practical Dynamic Software Updating for C&lt;/b>.
 Iulian Neamtiu, Michael Hicks, Gareth Stoyle, and Manuel Oriol.
 In &lt;em>Proceedings of the ACM Conference on Programming Language
 Design and Implementation (PLDI)&lt;/em>, pages 72--83, June 2006.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="pratikakis06locksmith">&lt;a href="pratikakis06locksmith.html">5&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Context-sensitive Correlation Analysis for Detecting Races&lt;/b>.
 Polyvios Pratikakis, Jeffrey&amp;nbsp;S. Foster, and Michael Hicks.
 In &lt;em>Proceedings of the ACM Conference on Programming Language
 Design and Implementation (PLDI)&lt;/em>, pages 320--331, June 2006.
&lt;/td>
&lt;/tr>
&lt;tr valign="top">
&lt;td align="right" class="bibtexnumber">
[&lt;a name="hicks06atomic">&lt;a href="hicks06atomic.html">6&lt;/a>&lt;/a>]
&lt;/td>
&lt;td class="bibtexitem">
&lt;b>Inferring Locking for Atomic Sections&lt;/b>.
 Michael Hicks, Jeffrey&amp;nbsp;S. Foster, and Polyvios Pratikakis.
 In &lt;em>On-line Proceedings of the ACM SIGPLAN Workshop on Languages,
 Compilers, and Hardware Support for Transactional Computing (TRANSACT)&lt;/em>, June
 2006.
&lt;p>&lt;a href="http://www.cs.purdue.edu/homes/jv/events/TRANSACT/transact-06.tgz">
&lt;a href="http://www.cs.purdue.edu/homes/jv/events/TRANSACT/transact-06.tgz" target="_blank" rel="noopener">http://www.cs.purdue.edu/homes/jv/events/TRANSACT/transact-06.tgz&lt;/a>&lt;/a>.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/AlexanderAHKKMGNS98.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/AlexanderAHKKMGNS98.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>The SwitchWare Active Network Architecture&lt;/b>.
D. Scott Alexander, William A. Arbaugh, Michael Hicks, Pankaj Kakkar,
Angelos Keromytis, Jonathan T. Moore, Carl A. Gunter, Scott M. Nettles, and
Jonathan M. Smith.
&lt;em>IEEE Network Magazine&lt;/em>, 12(3):29&amp;ndash;36, 1998.
Special issue on Active and Controllable Networks.&lt;/font>&lt;p>&lt;p>[ &lt;a href="http://www.cis.upenn.edu/~switchware/papers/switchware.ps">.ps&lt;/a> ]
&lt;a name="AlexanderAHKKMGNS98">&lt;/a>&lt;pre>
@article{AlexanderAHKKMGNS98,
author = {D. Scott Alexander and William A. Arbaugh and Michael Hicks and Pankaj Kakkar and Angelos Keromytis and Jonathan T. Moore and Carl A. Gunter and Scott M. Nettles and Jonathan M. Smith},
title = {The {SwitchWare} Active Network Architecture},
journal = {{IEEE Network Magazine}},
volume = 12,
number = 3,
year = 1998,
pages = {29-36},
note = {{Special issue on Active and Controllable Networks}}
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/AlexanderHKKSMGJNS98.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/AlexanderHKKSMGJNS98.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>The SwitchWare Active Network Implementation&lt;/b>.
D. Scott Alexander, Michael W. Hicks, Pankaj Kakkar, Angelos D.
Keromytis, Marianne Shaw, Jonathan T. Moore, Carl A. Gunter, Trevor Jim,
Scott M. Nettles, and Jonathan M. Smith.
In &lt;em>Notes of the ACM SIGPLAN Workshop on ML&lt;/em>, pages 67&amp;ndash;76,
September 1998.&lt;/font>&lt;p>&lt;p>[ &lt;a href="http://www.cis.upenn.edu/~switchware/papers/ml.ps">.ps&lt;/a> ]
&lt;a name="AlexanderHKKSMGJNS98">&lt;/a>&lt;pre>
@inproceedings{AlexanderHKKSMGJNS98,
author = {D. Scott Alexander and Michael W. Hicks and Pankaj
Kakkar and Angelos D. Keromytis and Marianne Shaw and Jonathan T. Moore and Carl A. Gunter and Trevor
Jim and Scott M. Nettles and Jonathan M. Smith},
title = {{The SwitchWare Active Network Implementation}},
booktitle = {Notes of the {ACM} {SIGPLAN} Workshop on {ML}},
month = {September},
year = 1998,
pages = {67&amp;ndash;76}
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/alvim17strat.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/alvim17strat.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Quantifying vulnerability of secret generation using hyper-distributions&lt;/b>.
Mário S. Alvim, Piotr Mardziel, and Michael Hicks.
In &lt;em>Proceedings of the Symposium on Principles of Security and
Trust (POST)&lt;/em>, April 2017.
Extended version of short paper that appeared at FCS 2016:
&lt;a href="http://www.cs.umd.edu/~mwh/papers/stratquant.pdf">
&lt;a href="http://www.cs.umd.edu/~mwh/papers/stratquant.pdf" target="_blank" rel="noopener">http://www.cs.umd.edu/~mwh/papers/stratquant.pdf&lt;/a>&lt;/a>.&lt;/font>&lt;p>
Traditional approaches to Quantitative Information Flow (QIF)
represent the adversary&amp;rsquo;s prior knowledge of possible secret values
as a single probability distribution.
This representation may miss important
structure.
For instance, representing prior knowledge about
passwords of a system&amp;rsquo;s users in this way
overlooks the fact that many users generate passwords using
some &lt;em>strategy&lt;/em>. Knowledge of such strategies can
help the adversary in guessing a secret, so ignoring them may
underestimate the secret&amp;rsquo;s vulnerability.
In this paper we explicitly model strategies as
distributions on secrets, and generalize the representation of
the adversary&amp;rsquo;s prior knowledge from a distribution on secrets
to an &lt;em>environment&lt;/em>, which is a distribution on strategies
(and, thus, a distribution on distributions on secrets,
called a &lt;em>hyper-distribution&lt;/em>).
By applying information-theoretic techniques to environments
we derive several meaningful generalizations of the traditional
approach to QIF.
In particular, we disentangle the
&lt;em>vulnerability of a secret&lt;/em> from the &lt;em>vulnerability of the strategies&lt;/em>
that generate secrets, and thereby distinguish
&lt;em>security by aggregation&lt;/em>&amp;mdash;which relies on the uncertainty over
strategies&amp;mdash;from &lt;em>security by strategy&lt;/em>&amp;mdash;which relies on the
intrinsic uncertainty within a strategy.
We also demonstrate that, in a precise way, no further generalization
of prior knowledge
(e.g., by using distributions of even higher order)
is needed to soundly quantify the vulnerability of the secret.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/an10rubydustTR.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/an10rubydustTR.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Dynamic Inference of Static Types for Ruby&lt;/b>.
Jong hoon (David) An, Avik Chaudhuri, Jeffrey S. Foster, and Michael
Hicks.
Technical Report CS-TR-4965, University of Maryland Department of
Computer Science, July 2010.
Extended version contains proofs of theorems.&lt;/font>&lt;p>
There have been several efforts to bring static type
inference to object-oriented dynamic languages such as Ruby, Python,
and Perl. In our experience, however, such type inference systems
are extremely difficult to develop, because dynamic languages are
typically complex, poorly specified, and include
features, such as &lt;tt>eval&lt;/tt> and reflection, that are hard to
analyze. In this paper, we introduce
&lt;em>constraint-based dynamic type inference&lt;/em>, a technique that
infers static types based on dynamic program executions. In our approach,
we wrap each run-time value to associate it with a type variable,
and the wrapper generates constraints on this type variable when
the wrapped value is used. This technique avoids many of the often
overly conservative approximations of static tools,
as constraints
are generated based on how values are used during actual program runs.
Using wrappers is also easy to implement, since we need only
write a constraint resolution algorithm and a transformation to
introduce the wrappers.
The best part is that we can eat our
cake, too: our algorithm will infer &lt;em>sound&lt;/em> types as long as it
observes every
path through each method body&amp;mdash;note that the number of such paths
may be dramatically smaller than the number of paths through the
program as a whole. We have developed Rubydust, an implementation of
our algorithm for Ruby. Rubydust takes advantage of Ruby&amp;rsquo;s dynamic
features to implement wrappers as a language library. We applied
Rubydust to a number of small programs. We found it to be
lightweight and useful: Rubydust discovered 1 real type error,
and all other inferred types were correct, and readable.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/an2011position.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/an2011position.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Position Paper: Dynamically Inferred Types for Dynamic Languages&lt;/b>.
Jong hoon (David) An, Avik Chaudhuri, Jeffrey S. Foster, and Michael
Hicks.
In &lt;em>Proceedings of the Workshop on Scripts to Programs (STOP)&lt;/em>,
January 2011.&lt;/font>&lt;p>
Capsule summary of results and future directions of dynamic type inference, as proposed in our &lt;a href="http://www.cs.umd.edu/~mwh/papers/an10rubydust.html">POPL 2011 paper&lt;/a>.&lt;/p>
 &lt;p>&lt;a name="an2011position">&lt;/a>&lt;pre>
@inproceedings{an2011position,
 title = {Position Paper: Dynamically Inferred Types for Dynamic Languages},
 author = {Jong-hoon (David) An and Avik Chaudhuri and Jeffrey S. Foster and Michael Hicks},
 booktitle = {Proceedings of the Workshop on Scripts to Programs (STOP)},
 month = jan,
 year = 2011
}
&lt;/pre>
&lt;hr>&lt;p>&lt;em>This file was generated by
&lt;a href="http://www.lri.fr/~filliatr/bibtex2html/">bibtex2html&lt;/a> 1.99.&lt;/em>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/barthe2015dagstuhl.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/barthe2015dagstuhl.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>The Synergy Between Programming Languages and Cryptography (Dagstuhl
Seminar 14492)&lt;/b>.
Gilles Barthe, Michael Hicks, Florian Kerschbaum, and Dominique
Unruh.
&lt;em>Dagstuhl Reports&lt;/em>, 4(12):29&amp;ndash;47, 2015.&lt;/font>&lt;p>
Increasingly, modern cryptography (crypto) has moved beyond the problem of secure communication to a broader consideration of securing computation. The past thirty years have seen a steady progression of both theoretical and practical advances in designing cryptographic protocols for problems such as secure multiparty computation, searching and computing on encrypted data, verifiable storage and computation, statistical data privacy, and more. More recently, the programming-languages (PL) community has begun to tackle the same set of problems, but from a different perspective, focusing on issues such as language design (e.g., new features or type systems), formal methods (e.g., model checking, deductive verification, static and dynamic analysis), compiler optimizations, and analyses of side-channel attacks and information leakage. This seminar helped to cross-fertilize ideas between the PL and crypto communities, exploiting the synergies for advancing the development of secure computing, broadly speaking, and fostering new research directions in and across both communities.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/chakarov25awsauth.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/chakarov25awsauth.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Formally Verified Cloud-Scale Authorization&lt;/b>.
Aleks Chakarov, Jaco Geldenhuys, Matthew Heck, Michael Hicks, Sam
Huang, Georges-Axel Jaloyan, Anjali Joshi, K. Rustan M. Leino, Mikael Mayer,
Sean McLaughlin, Akhilesh Mritunjai, Clement Pit-Claudel, Sorawee
Porncharoenwase, Marianna Rapoport, Cody Roux, Neha Rungta, Robin Salkeld,
Matthias Schlaipfer, Daniel Schoepe, Johanna Schwartzentruber, Serdar
Tasiran, Aaron Tomb, Jean-Baptiste Tristan, Emina Torlak, Lucas Wagner,
Michael W. Whalen, Remy Willems, Tongtong Xiang, Tae Joon Byun, Joshua Cohen,
Ruijie Fang, Junyoung Jang, Jakob Rath, Hira Taqdees Syeda, Dominik Wagner,
and Yongwei Yuan.
In &lt;em>Proceedings of the International Conference on Software
Engineering (ICSE)&lt;/em>, April 2025.
&lt;b>Distinguished Paper&lt;/b>.&lt;/font>&lt;p>
All critical systems must evolve to meet the needs of a growing and diversifying user base. But supporting that evolution is challenging at increasing scale: Maintainers must find a way to ensure that each change does only what is intended, and will not inadvertently change behavior for existing users. This paper presents how we addressed this challenge for a cloud-scale authorization engine, invoked 1 billion times per second, by using formal verification. Over a period of four years, we built a new authorization engine, one that behaves functionally the same as its predecessor, using the verification-aware programming language Dafny. We can now confidently deploy enhancements and optimizations while maintaining the highest assurance of both correctness and backward compatibility. We deployed the new engine in 2024 without incident and customers immediately enjoyed a threefold performance improvement. The methodology we followed to build this new engine was not an off-the-shelf application of an existing verification tool, and this paper presents several key insights: 1) Rather than prove correct the existing engine, written in Java, we found it more effective to write a new engine in Dafny, a language built for verification from the ground up, and then compile the result to Java. 2) To ensure performance, debuggability, and to gain trust from stakeholders, we needed to generate readable, idiomatic Java code, essentially a transliteration of the source Dafny. 3) To ensure that the specification matches the system&amp;rsquo;s actual behavior, we performed extensive differential and shadow testing throughout the development process, ultimately comparing against 10&lt;sup>1&lt;/sup>5 production samples prior to deployment.&lt;p>
Our approach demonstrates how formal verification can be effectively applied to evolve critical legacy software at scale.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/coblenz21bronze.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/coblenz21bronze.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Does the Bronze Garbage Collector Make Rust Easier to Use? A Controlled
Experiment&lt;/b>.
Michael Coblenz, Michelle Mazurek, and Michael Hicks.
In &lt;em>Proceedings of the International Conference on Software
Engineering (ICSE)&lt;/em>, May 2022.
&lt;b>Distinguished Paper Award Nominee&lt;/b>.&lt;/font>&lt;p>
Rust is a general-purpose programming language that is both type- and memory-safe. Rust does not use a garbage collector, but rather achieves these properties through a sophisticated, but complex, type system. Doing so makes Rust very efficient, but makes Rust relatively hard to learn and use. We designed Bronze, an optional, library-based garbage collector for Rust. To see whether Bronze could make Rust more usable, we conducted a randomized controlled trial with volunteers from a 633-person class, collecting data from 428 students in total. We found that for a task that required managing complex aliasing, Bronze users were more likely to complete the task in the time available, and those who did so required only about a third as much time (4 hours vs. 12 hours). We found no significant difference in total time, even though Bronze users re-did the task without Bronze afterward. Surveys indicated that ownership, borrowing, and lifetimes were primary causes of the challenges that users faced when using Rust.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/cutler24cedar.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/cutler24cedar.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Cedar: A New Language for Expressive, Fast, Safe, and Analyzable
Authorization (Extended Version)&lt;/b>.
Joseph W. Cutler, Craig Disselkoen, Aaron Eline, Shaobo He, Kyle
Headley, Michael Hicks, Kesha Hietala, Eleftherios Ioannidis, John Kastner,
Anwar Mamat, Darin McAdams, Matt McCutchen, Neha Rungta, Emina Torlak, and
Andrew Wells.
In &lt;em>Proceedings of the ACM Conference on Object-Oriented
Programming Languages, Systems, and Applications (OOPSLA)&lt;/em>, April 2024.&lt;/font>&lt;p>
Cedar is a new authorization policy language designed to be ergonomic, fast, safe, and analyzable. Rather than embed authorization logic in an application&amp;rsquo;s code, developers can write that logic as Cedar policies and delegate access decisions to Cedar&amp;rsquo;s evaluation engine. Cedar&amp;rsquo;s simple and intuitive syntax supports common authorization use-cases with readable policies, naturally leveraging concepts from role-based, attribute-based, and relation-based access control models. Cedar&amp;rsquo;s policy structure enables access requests to be decided quickly. Cedar&amp;rsquo;s policy validator leverages optional typing to help policy writers avoid mistakes, but not get in their way. Cedar&amp;rsquo;s design has been finely balanced to allow for a sound and complete logical encoding, which enables precise policy analysis, e.g., to ensure that when refactoring a set of policies, the authorized permissions do not change. We have modeled Cedar in the Lean programming language, and used Lean&amp;rsquo;s proof assistant to prove important properties of Cedar&amp;rsquo;s design. We have implemented Cedar in Rust, and released it open-source. Comparing Cedar to two open-source languages, OpenFGA and Rego, we find (subjectively) that Cedar has equally or more readable policies, but (objectively) performs far better.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/cutler24typesafety.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/cutler24typesafety.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Improving the Stability of Type Safety Proofs in Dafny&lt;/b>.
Joseph W. Cutler, Michael Hicks, and Emina Torlak, January 2024.
Dafny Workshop talk.&lt;/font>&lt;p>
In this extended abstract, we present a method for structuring type soundness proofs in Dafny to improve proof stability. As a case study, we apply the method to proving type soundness for a small expression language, and demonstrate empirically how it improves resource usage metrics known to correlate with stability. Our method can scale to realistic proofs, as demonstrated by its use in the type soundness proof of the Cedar language.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/darais19obliv.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/darais19obliv.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>A Language for Probabilistically Oblivious Computation&lt;/b>.
David Darais, Ian Sweet, Chang Liu, and Michael Hicks.
Technical Report abs/1711.09305, CoRR, July 2019.&lt;/font>&lt;p>
An oblivious computation is one that is free of direct and indirect
information leaks, e.g., due to observable differences in timing and
memory access patterns. This paper presents
λ&lt;sub>obliv&lt;/sub>, a core language whose type system enforces obliviousness.
Prior work on type-enforced oblivious computation has focused on
deterministic programs. λ&lt;sub>obliv&lt;/sub> is new in its consideration of
programs that implement &lt;em>probabilistic&lt;/em> algorithms, such as
those involved in cryptography. λ&lt;sub>obliv&lt;/sub> employs a substructural type
system and a novel notion of &lt;em>probability region&lt;/em> to ensure that
information is not leaked via the distribution of visible
events. The use of regions was motivated by a source of unsoundness
that we discovered in the type system of ObliVM, a language for implementing
state of the art oblivious algorithms and data structures. We prove
that λ&lt;sub>obliv&lt;/sub>&amp;rsquo;s type system enforces obliviousness and show that it is
expressive enough to typecheck advanced tree-based oblivious RAMs.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/darais20obliv.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/darais20obliv.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>A Language for Probabilistically Oblivious Computation&lt;/b>.
David Darais, Ian Sweet, Chang Liu, and Michael Hicks.
In &lt;em>Proceedings of the ACM Conference on Principles of
Programming Languages (POPL)&lt;/em>, January 2020.&lt;/font>&lt;p>
An oblivious computation is one that is free of direct and indirect
information leaks, e.g., due to observable differences in timing and
memory access patterns. This paper presents
λ&lt;sub>obliv&lt;/sub>, a core language whose type system enforces obliviousness.
Prior work on type-enforced oblivious computation has focused on
deterministic programs. λ&lt;sub>obliv&lt;/sub> is new in its consideration of
programs that implement &lt;em>probabilistic&lt;/em> algorithms, such as
those involved in cryptography. λ&lt;sub>obliv&lt;/sub> employs a substructural type
system and a novel notion of &lt;em>probability region&lt;/em> to ensure that
information is not leaked via the distribution of visible
events. The use of regions was motivated by a source of unsoundness
that we discovered in the type system of ObliVM, a language for implementing
state of the art oblivious algorithms and data structures. We prove
that λ&lt;sub>obliv&lt;/sub>&amp;rsquo;s type system enforces obliviousness and show that it is
expressive enough to typecheck advanced tree-based oblivious RAMs.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/disselkoen24vgd.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/disselkoen24vgd.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>How We Built Cedar: A Verification-Guided Approach&lt;/b>.
Craig Disselkoen, Aaron Eline, Shaobo He, Kyle Headley, Michael
Hicks, Kesha Hietala, John Kastner, Anwar Mamat, Matt McCutchen, Neha Rungta,
Bhakti Shah, Emina Torlak, and Andrew Wells.
In &lt;em>Proceedings of the European Software Engineering Conference
and the ACM SIGSOFT Symposium on the Foundations of Software Engineering
(ESEC/FSE)&lt;/em>, July 2024.
Industry papers track.&lt;/font>&lt;p>
This paper presents &lt;em>verification-guided development&lt;/em> (VGD), a software development process that we used to develop Cedar, a new policy language for expressive, fast, safe, and analyzable authorization. Developing a system with VGD involves two activities: (1) writing a readable, executable model of the system and proving mechanically-verified properties about it; and (2) writing production code for the system, using extensive &lt;em>differential random testing&lt;/em> (DRT) to check that the production code&amp;rsquo;s behavior matches that of the model, and &lt;em>property-based testing&lt;/em> (PBT) to check properties of unmodeled components of the production code. Using VGD for Cedar has been beneficial: we are able to build fast, idiomatic production code and find and fix bugs during the development phase: when carrying out proofs we found and fixed four soundness bugs in Cedar&amp;rsquo;s policy validator, and when carrying out DRT and PBT we found and fixed 21 bugs in the Cedar parser, evaluator, authorizer, and validator.&lt;p>[ &lt;a href="https://www.amazon.science/publications/how-we-built-cedar-a-verification-guided-approach">http&lt;/a> ]
&lt;a name="disselkoen24vgd">&lt;/a>&lt;pre>
@inproceedings{disselkoen24vgd,
title = {How We Built Cedar: A Verification-Guided Approach},
author = {Craig Disselkoen and Aaron Eline and Shaobo He and Kyle Headley and Michael Hicks and Kesha Hietala and John Kastner and Anwar Mamat and Matt McCutchen and Neha Rungta and Bhakti Shah and Emina Torlak and Andrew Wells},
booktitle = {Proceedings of the European Software Engineering Conference and the ACM SIGSOFT Symposium on the Foundations of Software Engineering (ESEC/FSE)},
note = {Industry papers track},
year = 2024,
month = jul
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/GrossmanMJHWC02.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/GrossmanMJHWC02.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Region-based Memory Management in Cyclone&lt;/b>.
Dan Grossman, Greg Morrisett, Trevor Jim, Michael Hicks, Yanling
Wang, and James Cheney.
In &lt;em>Proceedings of the ACM Conference on Programming Language
Design and Implementation (PLDI)&lt;/em>, pages 282&amp;ndash;293. ACM, June 2002.&lt;/font>&lt;p>
Cyclone is a polymorphic, type-safe programming language derived
from C . The primary design goals of Cyclone are to let
programmers control data representations and memory management
without sacrificing type-safety. In this paper, we focus on the
region-based memory management of Cyclone and its static typing
discipline. The design incorporates several advancements, including
support for region subtyping and a coherent integration with stack
allocation and a garbage collector. To support separate
compilation, Cyclone requires programmers to write some explicit
region annotations, but uses a combination of default annotations,
local type inference, and a novel treatment of region effects to
reduce this burden. As a result, we integrate C idioms in a
region-based framework. In our experience, porting legacy C to
Cyclone has required altering about 8% of the code; of the
changes, only 6% (of the 8%) were region annotations.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hammer13adaptontr.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/hammer13adaptontr.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Adapton: Composable, Demand-Driven Incremental Computation&lt;/b>.
Matthew Hammer, Yit Phang Khoo, Michael Hicks, and Jeffrey S. Foster.
Technical Report CS-TR-5027, Department of Computer Science, the
University of Maryland, College Park, July 2013.&lt;/font>&lt;p>
Many researchers have proposed programming languages that
support &lt;em>incremental computation&lt;/em> (IC), which allows programs
to be efficiently re-executed after a small change to the
input. However, existing implementations of such languages have two
important drawbacks. First, recomputation is oblivious to
specific demands on the program output; that is, if a program input
changes, all dependencies will be recomputed, even if an observer no
longer requires certain outputs. Second, programs are made
incremental as a unit, with little or no support for reusing
results outside of their original context, e.g., when reordered.
To address these problems, we present lambdaCDDIC, a core calculus that applies
a &lt;em>demand-driven&lt;/em> semantics to incremental computation,
tracking changes in a hierarchical fashion in a novel &lt;em>demanded
computation graph&lt;/em>. lambdaCDDIC also formalizes an explicit
separation between inner, incremental computations and outer
observers. This combination ensures lambdaCDDIC programs only recompute
computations as demanded by observers, and allows inner computations
to be composed more freely. We describe an algorithm for implementing
lambdaCDDIC efficiently, and we present AdaptOn, a library for writing
lambdaCDDIC-style programs in OCaml. We evaluated AdaptOn on a range of
benchmarks, and found that it provides reliable speedups, and in
many cases dramatically outperforms prior state-of-the-art IC approaches.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hayden11testing-TR.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/hayden11testing-TR.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Evaluating Dynamic Software Update Safety Using Efficient Systematic
Testing&lt;/b>.
Christopher M. Hayden, Edward K. Smith, Eric A. Hardisty, Michael
Hicks, and Jeffrey S. Foster.
Technical Report CS-TR-4993, University of Maryland, Department of
Computer Science, September 2011.&lt;/font>&lt;p>
Dynamic software updating (DSU) systems patch programs on the fly without incurring downtime. To avoid failures due to the updating process itself, many DSU systems employ timing restrictions. However, timing restrictions are theoretically imperfect, and their practical effectiveness is an open question. This paper presents the first significant empirical evaluation of three popular timing restrictions: activeness safety (AS), which prevents updates to active functions; confreeness safety (CFS), which only allows modifications to active functions when doing so is provably type-safe; and manual identification of the event-handling loops during which an update may occur. We evaluated these timing restrictions using a series of DSU patches to three programs: OpenSSH, vsftpd, and ngIRCd.We systematically applied updates at each distinct update point reached during execution of a suite of system tests for these programs to determine which updates pass and which fail. We found that all three timing restrictions prevented most failures, but only manual identification allowed none. Further, although CFS and AS allowed many more update points, manual identification still supported updates with minimal delay. Finally, we found that manual identification required the least developer effort. Overall, we conclude that manual identification is most effective.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hayden12dsucorrect.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/hayden12dsucorrect.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Specifying and Verifying the Correctness of Dynamic Software Updates&lt;/b>.
Christopher M. Hayden, Stephen Magill, Michael Hicks, Nate Foster,
and Jeffrey S. Foster.
In &lt;em>Proceedings of the International Conference on Verified
Software: Theories, Tools, and Experiments (VSTTE)&lt;/em>, pages 278&amp;ndash;293,
January 2012.&lt;/font>&lt;p>
Dynamic software updating
(DSU) systems allow running programs to be patched on-the-fly
to add features or fix bugs. While dynamic updates can be tricky
to write, techniques for establishing their
correctness have received little attention.
In this paper, we present the first methodology for automatically
verifying the correctness of dynamic updates. Programmers express
the desired properties of an updated execution using
&lt;em>client-oriented specifications&lt;/em> (CO-specs), which can describe a
wide range of client-visible behaviors.
We verify CO-specs automatically by using off-the-shelf tools to
analyze a &lt;em>merged&lt;/em> program, which is a combination of the old and new
versions of a program, along with the CO-spec.
We formalize the merging transformation and prove it correct. We
also implemented a C program merger, and applied it to updates
for the Redis key-value server and to updates for several synthetic
programs. Using the Thor verification tool we could verify
many of the synthetic programs, while Otter, a symbolic
executor, could analyze every program, often in less than a minute.
Both tools were able to detect faulty patches and incurred only a
factor-of-four slowdown, on average, compared with analyzing individual
versions.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hicks14polymonad.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/hicks14polymonad.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Polymonadic Programming&lt;/b>.
Michael Hicks, Gavin Bierman, Nataliya Guts, Daan Leijen, and Nikhil
Swamy.
In &lt;em>Proceedings of the Fifth Workshop on Mathematically
Structured Functional Programming (MSFP)&lt;/em>, April 2014.&lt;/font>&lt;p>
Monads are a popular tool for the working functional programmer to
structure effectful computations. This paper presents
&lt;em>polymonads&lt;/em>, a generalization of monads. Polymonads give the
familiar monadic bind the more general type
for all&lt;em>a&lt;/em>,&lt;em>b&lt;/em>. &lt;em>L&lt;/em> &lt;em>a&lt;/em> -&amp;gt;(&lt;em>a&lt;/em> -&amp;gt;&lt;em>M&lt;/em> &lt;em>b&lt;/em>) -&amp;gt;&lt;em>N&lt;/em> &lt;em>b&lt;/em>, to
compose computations with three different kinds of effects, rather
than just one. Polymonads subsume monads and parameterized monads,
and can express other constructions, including precise
type-and-effect systems and information flow tracking; more
generally, polymonads correspond to Tate&amp;rsquo;s &lt;em>productoid&lt;/em>
semantic model. We show how to equip a core language (called λ&lt;sub>PM&lt;/sub>)
with syntactic support for programming with polymonads. Type
inference and elaboration in λ&lt;sub>PM&lt;/sub> allows programmers to write
polymonadic code directly in an ML-like syntax&amp;mdash;our algorithms
compute principal types and produce elaborated programs wherein
the binds appear explicitly. Furthermore, we prove that the
elaboration is &lt;em>coherent&lt;/em>: no matter which (type-correct) binds
are chosen, the elaborated program&amp;rsquo;s semantics will be the
same. Pleasingly, the inferred types are easy to read: the polymonad
laws justify (sometimes dramatic) simplifications, but with no
effect on a type&amp;rsquo;s generality.&lt;p>
&lt;a href="http://www.cs.umd.edu/~mwh/polymonads-impl.tgz">A prototype implementation of λ&lt;sub>PM&lt;/sub>&lt;/a> is available.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/Hicks98.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/Hicks98.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>PLAN System Security&lt;/b>.
Michael Hicks.
Technical Report MS-CIS-98-25, Department of Computer and Information
Science, University of Pennsylvania, April 1998.&lt;/font>&lt;p>&lt;p>[ &lt;a href="http://www.cis.upenn.edu/~switchware/papers/plan_security.ps">.ps&lt;/a> ]
&lt;a name="Hicks98">&lt;/a>&lt;pre>
@techreport{Hicks98,
author = {Michael Hicks},
title = {{PLAN} System Security},
institution = {Department of Computer and Information Science, University of Pennsylvania},
type = {Technical Report},
number = {MS-CIS-98-25},
month = {April},
year = {1998}
}
&lt;/pre>&lt;/p>
&lt;hr>&lt;p>&lt;em>This file was generated by
&lt;a href="http://www.lri.fr/~filliatr/bibtex2html/">bibtex2html&lt;/a> 1.99.&lt;/em>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/HicksHMN98.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/HicksHMN98.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>A Study of Large Object Spaces&lt;/b>.
Michael Hicks, Luke Hornof, Jonathan T. Moore, and Scott Nettles.
In &lt;em>Proceedings of the ACM International Symposium on Memory
Management (ISMM)&lt;/em>, pages 138&amp;ndash;145. ACM, October 1998.&lt;/font>&lt;p>
This paper examines the design space for copying garbage collectors
(GCs) in which “large objects” are managed in a separate,
non-copy-collected space. We focus on two main issues:&lt;/p>
&lt;p>&lt;ol>
how to set the policy for classifying objects as &amp;ldquo;large&amp;rdquo;
how to manage the large object space
&lt;/ol>
We explore these issues experimentally using the Oscar GC testbed. In
particular, we vary the threshold size of large objects and also
whether the objects may contain pointers. Furthermore, we compare the
performance of treadmill collection to that of mark-and-sweep
collection for managing the large object space.&lt;p>
We find that for some heaps there is a minimum cutoff size below which
adding objects to the large object space does not result in a
performance improvement, while for others no such cutoff exists. In
general, including pointer-containing objects in the large object
space seems beneficial. Finally, the exact method used to collect the
large object space does not significantly influence overall
performance.
&lt;p>[&amp;nbsp;&lt;a href="http://www.cis.upenn.edu/~oscar/ismm98.ps">.ps&lt;/a>&amp;nbsp;]
&lt;a name="HicksHMN98">&lt;/a>&lt;pre>
@inproceedings{HicksHMN98,
 author = {Michael Hicks and Luke Hornof and Jonathan T. Moore and Scott Nettles},
 title = {A Study of Large Object Spaces},
 booktitle = {Proceedings of the {ACM} International Symposium on Memory Management (ISMM)},
 pages = {138--145},
 year = 1998,
 publisher = {{ACM}},
 month = {October}
}
&lt;/pre>
&lt;hr>&lt;p>&lt;em>This file was generated by
&lt;a href="http://www.lri.fr/~filliatr/bibtex2html/">bibtex2html&lt;/a> 1.99.&lt;/em>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/HicksK99.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/HicksK99.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>A Secure PLAN&lt;/b>.
Michael Hicks and Angelos D. Keromytis.
In Stefan Covaci, editor, &lt;em>Proceedings of the First International
Working Conference on Active Networks (IWAN)&lt;/em>, volume 1653 of &lt;em>Lecture
Notes in Computer Science&lt;/em>, pages 307&amp;ndash;314. Springer-Verlag, June 1999.
Reprinted with extensions in DARPA Active Networks Conference and
Exposition (DANCE) and IEEE Transactions on Systems, Man, and Cybernetics,
Part C.&lt;/font>&lt;p>
Active Networks promise greater flexibility than current networks, but
threaten safety and security by virtue of their programmability. In this
paper, we describe the design and implementation of a security architecture
for the active network &lt;em>PLANet&lt;/em>. Security is obtained
with a two-level architecture that combines a functionally restricted packet
language, PLAN, with an environment of general-purpose
service routines governed by &lt;em>trust management&lt;/em>. In
particular, we employ a technique which expands or contracts a packet&amp;rsquo;s
service environment based on its level of privilege, termed &lt;em>
namespace-based security&lt;/em>. As an application of our security architecture,
we present the design and implementation of an active-network firewall. We
find that the addition of the firewall imposes around a 30 percent latency
overhead, and as little as a 6.7 percent space overhead to incoming packets.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/HicksKMGN98.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/HicksKMGN98.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>PLAN: A Packet Language for Active Networks&lt;/b>.
Michael Hicks, Pankaj Kakkar, Jonathan T. Moore, Carl A. Gunter, and
Scott Nettles.
In &lt;em>Proceedings of the Third ACM SIGPLAN International
Conference on Functional Programming Languages (ICFP)&lt;/em>, pages 86&amp;ndash;93. ACM,
September 1998.&lt;/font>&lt;p>
PLAN (Packet Language for Active Networks) is a new language for
programs that form the packets of a programmable network. These
programs replace the packet headers (which can be viewed as very
rudimentary programs) used in current networks. As such, PLAN
programs are lightweight and of restricted functionality. These
limitations are mitigated by allowing PLAN code to call node-resident
&lt;em>service routines&lt;/em> written in other, more powerful languages.
This two-level architecture, in which PLAN serves as a scripting or
`glue&amp;rsquo; language for more general services, is the primary contribution
of this paper. We have successfully applied the PLAN programming
environment to implement an IP-free internetwork.&lt;p>
PLAN is based on the simply typed lambda calculus and provides a
restricted set of primitives and datatypes. PLAN defines a special
construct called a &lt;em>chunk&lt;/em> used to describe the remote execution
of PLAN programs on other nodes. Primitive operations on chunks are
used to provide basic data transport in the network and to support
layering of protocols. Remote execution can make debugging difficult,
so PLAN provides strong static guarantees to the programmer, such as
type safety. A more novel property aimed at protecting network
availability is a guarantee that PLAN programs use a bounded amount of
network resources.&lt;p>[ &lt;a href="http://www.cis.upenn.edu/~switchware/papers/plan.ps">.ps&lt;/a> ]
&lt;a name="HicksKMGN98">&lt;/a>&lt;pre>
@inproceedings{HicksKMGN98,
author = {Michael Hicks and Pankaj Kakkar and Jonathan T. Moore and Carl A. Gunter and Scott Nettles},
title = {{PLAN}: A Packet Language for Active Networks},
booktitle = {Proceedings of the Third {ACM} {SIGPLAN} International Conference on Functional Programming Languages (ICFP)},
month = {September},
year = 1998,
pages = {86&amp;ndash;93},
publisher = {ACM}
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/HicksKMGN98ipl.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/HicksKMGN98ipl.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Network Programming Using PLAN&lt;/b>.
Michael Hicks, Pankaj Kakkar, Jonathan T. Moore, Carl A. Gunter, and
Scott Nettles.
In Luca Cardelli, editor, &lt;em>Proceedings of the IEEE Workshop on
Internet Programming Languages&lt;/em>, volume 1686 of &lt;em>Lecture Notes in
Computer Science&lt;/em>, pages 127&amp;ndash;143. Springer-Verlag, May 1998.&lt;/font>&lt;p>
We present here a methodology for programming active networks in the
environment defined by our new language PLAN (Packet Language for
Active Networks). This environment presumes a two-level architecture
consisting of:&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/HicksMAGN99.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/HicksMAGN99.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>PLANet: An Active Internetwork&lt;/b>.
Michael Hicks, Jonathan T. Moore, D. Scott Alexander, Carl A. Gunter,
and Scott Nettles.
In &lt;em>Proceedings of the Eighteenth IEEE Computer and
Communication Society INFOCOM Conference&lt;/em>, pages 1124&amp;ndash;1133. IEEE, March
1999.&lt;/font>&lt;p>
We present &lt;em>PLANet&lt;/em>: an active network architecture and
implementation. In addition to a standard suite of Internet-like
services, PLANet has two key programmability features:&lt;/p>
&lt;p>&lt;ol>
all packets contain programs
router functionality may be extended dynamically
&lt;/ol>
Packet programs are written in our special purpose programming
language PLAN, the Packet Language for Active Networks, while dynamic
router extensions are written in OCaml, a dialect of ML.&lt;p>
Currently, PLANet routers run as byte-code-interpreted Linux
user-space applications, and support Ethernet and IP as link layers.
PLANet achieves respectable performance on standard networking
operations: on 300&amp;nbsp;MHz Pentium-II's attached to 100&amp;nbsp;Mbps Ethernet,
PLANet can route 48&amp;nbsp;Mbps and switch over 5000 packets per second. We
demonstrate the utility of PLANet's activeness by showing
experimentally how it can non-trivially improve application and
aggregate network performance in congested conditions.&lt;p>[&amp;nbsp;&lt;a href="http://www.cis.upenn.edu/~switchware/papers/planet.ps">.ps&lt;/a>&amp;nbsp;]
&lt;a name="HicksMAGN99">&lt;/a>&lt;pre>
@inproceedings{HicksMAGN99,
 author = {Michael Hicks and Jonathan T. Moore and D. Scott Alexander and Carl A. Gunter and Scott Nettles},
 title = {{PLANet}: An Active Internetwork},
 booktitle = {Proceedings of the Eighteenth {IEEE} Computer and
		 Communication Society {INFOCOM} Conference},
 month = {March},
 year = 1999,
 publisher = {{IEEE}},
 pages = {1124--1133}
}
&lt;/pre>
&lt;hr>&lt;p>&lt;em>This file was generated by
&lt;a href="http://www.lri.fr/~filliatr/bibtex2html/">bibtex2html&lt;/a> 1.99.&lt;/em>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/HicksMN97.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/HicksMN97.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>The Measured Cost of Copying Garbage Collection Mechanisms&lt;/b>.
Michael W. Hicks, Jonathan T. Moore, and Scott M. Nettles.
In &lt;em>Proceedings of the ACM SIGPLAN Conference on Functional
Programming (ICFP)&lt;/em>, pages 292&amp;ndash;305. ACM, June 1997.&lt;/font>&lt;p>
We examine the costs and benefits of a variety of copying garbage
collection (GC) mechanisms across multiple architectures and
programming languages. Our study covers both low-level object
representation and copying issues as well as the mechanisms needed to
support more advanced techniques such as generational collection,
large object spaces, and type-segregated areas.&lt;p>
Our experiments are made possible by a novel performance analysis
tool, &lt;em>Oscar.&lt;/em> Oscar allows us to capture snapshots of programming
language heaps that may then be used to replay garbage
collections. The replay program is self-contained and written in C,
which makes it easy to port to other architectures and to analyze with
standard performance analysis tools. Furthermore, it is possible to
study additional programming languages simply by instrumenting
existing implementations to capture heap snapshots.&lt;p>
In general, we found that careful implementation of GC mechanisms can
have a significant benefit. For a simple collector, we measured
improvements of as much as 95 percent. We then found that while the addition
of advanced features can have a sizeable overhead (up to 15 percent), the
net benefit is quite positive, resulting in additional gains of up to
42 percent. We also found that results varied depending upon the platform
and language. Machine characteristics such as cache arrangements,
instruction set (RISC/CISC), and register pool were important. For
different languages, average object size seemed to be most important.&lt;p>
The results of our experiments demonstrate the usefulness of a tool
like Oscar for studying GC performance. Without much overhead, we can
easily identify areas where programming language implementors could
collaborate with GC implementors to improve GC performance.&lt;p>[ &lt;a href="http://www.cis.upenn.edu/~oscar/icfp97.ps">.ps&lt;/a> ]
&lt;a name="HicksMN97">&lt;/a>&lt;pre>
@inproceedings{HicksMN97,
author = {Michael W. Hicks and Jonathan T. Moore and Scott M. Nettles},
title = {The Measured Cost of Copying Garbage Collection Mechanisms},
booktitle = {Proceedings of the {ACM} {SIGPLAN} Conference on
Functional Programming (ICFP)},
year = 1997,
publisher = {{ACM}},
pages = {292&amp;ndash;305},
month = {June}
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/HicksNettles03.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/HicksNettles03.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Dynamic Software Updating&lt;/b>.
Michael Hicks and Scott M. Nettles.
&lt;em>ACM Transactions on Programming Languages and Systems
(TOPLAS)&lt;/em>, 27(6):1049&amp;ndash;1096, November 2005.&lt;/font>&lt;p>
Many important applications must run continuously and without interruption,
yet must be changed to fix bugs or upgrade functionality. No
prior general-purpose methodology for dynamic updating achieves a practical
balance between flexibility, robustness, low overhead, and ease of use.&lt;p>
We present an approach for C-like languages that provides type-safe dynamic
updating of native code in an extremely flexible manner (code, data, and
types may be updated, at programmer-determined times) and permits the use of
automated tools to aid the programmer in the updating process. Our system
is based on dynamic patches that contain both the updated code and the code
needed to transition from the old version to the new. A novel aspect of our
patches is that they consist of verifiable native code (e.g. Proof-Carrying
Code or Typed Assembly Language), which is native code accompanied by
annotations that allow on-line verification of the code&amp;rsquo;s safety. We
discuss how patches are generated mostly automatically, how they are applied
using dynamic-linking technology, and how code is compiled to make it
updateable.&lt;p>
To concretely illustrate our system, we have implemented a
dynamically-updateable web server, FlashEd. We discuss our experience
building and maintaining FlashEd, and generalize to present observations
about updateable software development. Performance experiments show that
for FlashEd, the overhead due to updating is low: typically less than 1
percent.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/hietala21qproof.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/hietala21qproof.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Proving Quantum Programs Correct&lt;/b>.
Kesha Hietala, Robert Rand, Shih-Han Hung, Liyi Li, and Michael
Hicks.
In &lt;em>Proceedings of the Conference on Interative Theorem Proving
(ITP)&lt;/em>, June 2021.&lt;/font>&lt;p>
As quantum computing steadily progresses from theory to practice, programmers are faced with a common problem: How can they be sure that their code does what they intend it to do? This paper presents encouraging results in the application of mechanized proof to the domain of quantum programming in the context of the SQIR development. It verifies the correctness of a range of a quantum algorithms including Simon&amp;rsquo;s algorithm, Grover&amp;rsquo;s algorithm and quantum phase estimation, a key component of Shor&amp;rsquo;s algorithm. In doing so, it aims to highlight both the successes and challenges of formal verification in the quantum context and motivate the theorem proving community to target quantum computing as an application domain.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/JimMGHCW02.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/JimMGHCW02.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Cyclone: A Safe Dialect of C&lt;/b>.
Trevor Jim, Greg Morrisett, Dan Grossman, Michael Hicks, James
Cheney, and Yanling Wang.
In &lt;em>Proceedings of the USENIX Annual Technical Conference&lt;/em>,
pages 275&amp;ndash;288. USENIX, June 2002.&lt;/font>&lt;p>
Cyclone is a safe dialect of C . It has been designed from the
ground up to prevent the buffer overflows, format string attacks,
and memory management errors that are common in C programs, while
retaining C&amp;rsquo;s syntax and semantics. This paper examines safety
violations enabled by C&amp;rsquo;s design, and shows how Cyclone avoids them,
without giving up C&amp;rsquo;s hallmark control over low-level details such
as data representation and memory management.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/KakkarHMG99.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/KakkarHMG99.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Specifying the PLAN Network Programming Language&lt;/b>.
Pankaj Kakkar, Michael Hicks, Jonathan T. Moore, and Carl A. Gunter.
In &lt;em>Higher Order Operational Techniques in Semantics (HOOTS)&lt;/em>,
volume 26 of &lt;em>Electronic Notes in Theoretical Computer Science&lt;/em>, pages
87&amp;ndash;104. Elsevier, September 1999.&lt;/font>&lt;p>&lt;p>[ &lt;a href="http://www.cis.upenn.edu/~switchware/PLAN/spec/spec-experience.ps">.ps&lt;/a> ]
&lt;a name="KakkarHMG99">&lt;/a>&lt;pre>
@inproceedings{KakkarHMG99,
author = {Pankaj Kakkar and Michael Hicks and Jonathan T. Moore and Carl A. Gunter},
title = {Specifying the {PLAN} Network Programming Language},
year = 1999,
volume = 26,
series = {Electronic Notes in Theoretical Computer Science},
booktitle = {Higher Order Operational Techniques in Semantics (HOOTS)},
pages = {87&amp;ndash;104},
publisher = {Elsevier},
month = {September}
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/khoo08jsarrows.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/khoo08jsarrows.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Directing JavaScript with Arrows (poster summary)&lt;/b>.
Yit Phang Khoo, Michael Hicks, Jeffrey S. Foster, and Vibha Sazawal.
In &lt;em>Poster Proceedings of the ACM International Conference on
Functional Programming (ICFP)&lt;/em>, September 2008.&lt;/font>&lt;p>
Event-driven programming in JavaScript often leads to code that
is messy and hard to maintain. We have found &lt;em>arrows&lt;/em>, a generalization
of &lt;em>monads&lt;/em>, to be an elegant solution to this problem. Our
arrow-based &lt;em>Arrowlets&lt;/em> library makes it easy to compose eventdriven
programs in modular units of code. In particular, we show
how to implement &lt;em>drag-and-drop&lt;/em> modularly using arrows.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/khoo08jsarrowstr.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/khoo08jsarrowstr.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Directing JavaScript with Arrows (Functional Pearl)&lt;/b>.
Yit Phang Khoo, Michael Hicks, Jeffrey S. Foster, and Vibha Sazawal.
Technical Report CS-TR-4923, University of Maryland, Department of
Computer Science, August 2008.
Extended version of ICFP 2008 poster.&lt;/font>&lt;p>
JavaScript, being a single-threaded language, makes extensive use of event-driven programming to enable responsive web applications. However, standard approaches to sequencing events are messy, and often lead to code that is difficult to understand and maintain. We have found that arrows, a generalization of monads, are an elegant solution to this problem. Arrows allow us to easily write asynchronous programs in small, modular units of code, and flexibly compose them in many different ways, while nicely abstracting the details of asynchronous program composition. In particular, we show how to use arrows to construct a variety of state machines, such as autoscrollers and drag-and-drop handlers.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/khoo08pathprojtr.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/khoo08pathprojtr.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Path Projection for User-Centered Static Analysis Tools (long version)&lt;/b>.
Yit Phang Khoo, Jeffrey S. Foster, Michael Hicks, and Vibha Sazawal.
Technical Report CS-TR-4919, University of Maryland, Department of
Computer Science, August 2008.&lt;/font>&lt;p>
The research and industrial communities have made great strides in developing sophisticated defect detection tools based on static analysis. However, to date most of the work in this area has focused on developing novel static analysis algorithms, and neglected study of other aspects of static analysis tools, in particular user interfaces. In this work, we present a novel user interface toolkit called Path Projection that helps users visualize, navigate, and understand program paths, a common component of many static analysis tools&amp;rsquo; error reports. We performed a controlled user study to measure the benefit of Path Projection in triaging error reports from Locksmith, a data race detection tool for C. We found that Path Projection improved participants&amp;rsquo; time to complete this task, without affecting accuracy, and that participants felt Path Projection was useful.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/khoo13cs-tr-5021.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/khoo13cs-tr-5021.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Expositor: Scriptable Time-Travel Debugging with First-Class Traces&lt;/b>.
Yit Phang Khoo, Jeffrey S. Foster, and Michael Hicks.
Technical Report CS-TR-5021, Department of Computer Science,
University of Maryland, College Park, February 2013.&lt;/font>&lt;p>&lt;p>[ &lt;a href="https://drum.lib.umd.edu/bitstream/handle/1903/14406/CS-TR-5021.pdf">.pdf&lt;/a> ]
&lt;a name="khoo13cs-tr-5021">&lt;/a>&lt;pre>
@techreport{khoo13cs-tr-5021,
author = {Yit Phang Khoo and Jeffrey S. Foster and Michael Hicks},
title = {{Expositor: Scriptable Time-Travel Debugging with First-Class Traces}},
institution = {Department of Computer Science, University of Maryland, College Park},
year = {2013},
number = {CS-TR-5021},
month = {February}
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/klees2018fuzzeval.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/klees2018fuzzeval.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Evaluating Fuzz Testing&lt;/b>.
George T. Klees, Andrew Ruef, Benjamin Cooper, Shiyi Wei, and Michael
Hicks.
In &lt;em>Proceedings of the ACM Conference on Computer and
Communications Security (CCS)&lt;/em>, October 2018.
Winner of the 7th NSA &lt;b>Best Scientific Cybersecurity Paper&lt;/b>
competition.&lt;/font>&lt;p> Fuzz testing has enjoyed great success at discovering
security critical bugs in real software. Recently,
researchers have devoted significant effort to
devising new fuzzing techniques, strategies, and
algorithms. Such new ideas are primarily evaluated
experimentally so an important question is: What
experimental setup is needed to produce trustworthy
results? We surveyed the recent research literature
and assessed the experimental evaluations carried
out by 32 fuzzing papers. We found problems in every
evaluation we considered. We then performed our own
extensive experimental evaluation using an existing
fuzzer. Our results showed that the general problems
we found in existing experimental evaluations can
indeed translate to actual wrong or misleading
assessments. We conclude with some guidelines that
we hope will help improve experimental evaluations
of fuzz testing algorithms, making reported results
more robust.&lt;p>[ &lt;a href="https://arxiv.org/abs/1808.09700">http&lt;/a> ]
&lt;a name="klees2018fuzzeval">&lt;/a>&lt;pre>
@inproceedings{klees2018fuzzeval,
author = {George T. Klees and Andrew Ruef and Benjamin Cooper and Shiyi Wei and Michael Hicks},
title = {Evaluating Fuzz Testing},
booktitle = {Proceedings of the {ACM} Conference on Computer and Communications Security (CCS)},
year = {2018},
month = oct,
note = {Winner of the 7th NSA \textbf{Best Scientific Cybersecurity Paper} competition}
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/li2021verified.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/li2021verified.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Verified Compilation of Quantum Oracles&lt;/b>.
Liyi Li, Finnegan Voichick, Kesha Hietala, Yuxiang Peng, Xiaodi Wu,
and Michael Hicks, December 2021.&lt;/font>&lt;p>
Quantum algorithms often apply classical operations, such as arithmetic or predicate checks, over a quantum superposition of classical data; these so-called oracles are often the largest components of a quantum algorithm. To ease the construction of efficient, correct oracle functions, this paper presents VQO, a high-assurance framework implemented with the Coq proof assistant. The core of VQO is OQASM, the oracle quantum assembly language. OQASM operations move qubits among three different bases via the Quantum Fourier Transform and Hadamard operations, thus admitting important optimizations, but without inducing entanglement and the exponential blowup that comes with it. OQASM&amp;rsquo;s design enabled us to prove correct VQO&amp;rsquo;s compilers &amp;ndash; from a simple imperative language called OQIMP to OQASM, and from OQASM to SQIR, a general-purpose quantum assembly language &amp;ndash; and allowed us to efficiently test properties of OQASM programs using the QuickChick property-based testing framework. We have used VQO to implement oracles used in Shor&amp;rsquo;s and Grover&amp;rsquo;s algorithms, as well as several common arithmetic operators. VQO&amp;rsquo;s oracles have performance comparable to those produced by Quipper, a state-of-the-art but unverified quantum programming platform.
&lt;p>[ &lt;a href="http://arxiv.org/abs/2112.06700">arXiv&lt;/a> ]
&lt;a name="li2021verified">&lt;/a>&lt;pre>
@misc{li2021verified,
title = {Verified Compilation of Quantum Oracles},
author = {Liyi Li and Finnegan Voichick and Kesha Hietala and Yuxiang Peng and Xiaodi Wu and Michael Hicks},
year = {2021},
eprint = {2112.06700},
archiveprefix = {arXiv},
month = dec
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/li2022verified.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/li2022verified.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Verified Compilation of Quantum Oracles&lt;/b>.
Liyi Li, Finnegan Voichick, Kesha Hietala, Yuxiang Peng, Xiaodi Wu,
and Michael Hicks.
In &lt;em>Proceedings of the ACM Conference on Object-Oriented
Programming Languages, Systems, and Applications (OOPSLA)&lt;/em>, December 2022.&lt;/font>&lt;p>
Quantum algorithms often apply classical operations, such as
arithmetic or predicate checks, over a quantum superposition of
classical data; these so-called &lt;em>oracles&lt;/em> are often the largest
components of a quantum program. To ease the construction of
efficient, correct oracle functions, this paper presents VQO, a
high-assurance framework implemented with the Coq proof
assistant. The core of VQO is OQASM, the &lt;em>oracle
quantum assembly language&lt;/em>. OQASM operations move qubits between
two different bases via the quantum
Fourier transform, thus admitting important optimizations, but
without inducing &lt;em>entanglement&lt;/em> and the exponential blowup that
comes with it. OQASM&amp;rsquo;s design enabled us to prove
correct VQO&amp;rsquo;s compilers&amp;mdash;from a simple imperative language called
OQIMP to OQASM, and from OQASM to SQIR, a general-purpose quantum
assembly language&amp;mdash;and allowed us to efficiently test properties of
OQASM programs using the QuickChick property-based testing
framework.
We have used VQO to implement a variety of arithmetic and geometric operators
that are building blocks for important oracles, including those used in Shor&amp;rsquo;s and Grover&amp;rsquo;s algorithms.
We found that VQO&amp;rsquo;s QFT-based arithmetic oracles require fewer qubits, sometimes substantially fewer, than those constructed using “classical” gates; VQO&amp;rsquo;s versions of the latter were nevertheless on par with or better than (in terms of both qubit and gate counts) oracles produced by Quipper, a state-of-the-art but unverified quantum programming platform.
&lt;p>[ &lt;a href="http://arxiv.org/abs/2112.06700">arXiv&lt;/a> ]
&lt;a name="li2022verified">&lt;/a>&lt;pre>
@inproceedings{li2022verified,
title = {Verified Compilation of Quantum Oracles},
author = {Liyi Li and Finnegan Voichick and Kesha Hietala and Yuxiang Peng and Xiaodi Wu and Michael Hicks},
booktitle = {Proceedings of the {ACM} Conference on Object-Oriented Programming Languages, Systems, and Applications (OOPSLA)},
year = {2022},
eprint = {2112.06700},
archiveprefix = {arXiv},
month = dec
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/li22checkedc.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/li22checkedc.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>A Formal Model of Checked C&lt;/b>.
Liyi Li, Yiyun Liu, Deena L. Postol, Leonidas Lampropoulos, David Van
Horn, and Michael Hicks.
In &lt;em>Proceedings of the Computer Security Foundations Symposium
(CSF)&lt;/em>, August 2022.&lt;/font>&lt;p>
In this work, we present a formal model of Checked C, a dialect of C that aims to enforce spatial memory safety. Our model pays particular attention to the semantics of dynamically sized, potentially null-terminated arrays. We formalize this model in Coq, and prove that any spatial memory safety errors can be blamed on portions of the program labeled unchecked; this is a Checked C feature that supports incremental porting and backward compatibility. Our model develops an operational semantics that uses fat pointers to guarantee spatial safety. However, we formalize a compilation scheme that can yield thin pointers, with bounds information managed using inserted code. We show that the generated code faithfully simulates the original. Finally, we build an executable version of our model in PLT Redex, and use a custom random generator for well-typed and almost-well-typed terms to find inconsistencies between our model and the Clang Checked C implementation. We find this a useful way to co-develop a language (Checked C is still in development) and a core model of it.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/machiry3c2022.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/machiry3c2022.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>C to Checked C by 3C&lt;/b>.
Aravind Machiry, John Kastner, Matt McCutchen, Aaron Eline, Kyle
Headley, and Michael Hicks.
In &lt;em>Proceedings of the ACM Conference on Object-Oriented
Programming Languages, Systems, and Applications (OOPSLA)&lt;/em>, December 2022.
&lt;b>Distinguished Paper&lt;/b>.&lt;/font>&lt;p>
Owing to the continued use of C (and C++), spatial safety violations
(e.g., buffer overflows) still constitute one of today&amp;rsquo;s most
dangerous and prevalent security vulnerabilities. To combat these
violations, &lt;em>Checked C&lt;/em> extends C with bounds-enforced
&lt;em>checked pointer&lt;/em> types. Checked C is essentially a
&lt;em>gradually typed&lt;/em> spatially safe C&amp;mdash;checked pointers are
backwards-binary compatible with legacy pointers, and the language
allows them to be added piecemeal, rather than necessarily all at
once, so that safety retrofitting can be incremental.&lt;p>
This paper presents a semi-automated process for porting a legacy C
program to Checked C . The process centers on 3C, a static
analysis-based annotation tool. 3C employs two novel static
analysis algorithms&amp;mdash;typ3c and boun3c&amp;mdash;to annotate legacy
pointers as checked pointers, and to infer array bounds annotations
for pointers that need them. 3C performs a &lt;em>root cause
analysis&lt;/em> to direct a human developer to code that should be
refactored; once done, 3C can be re-run to infer further
annotations (and updated root causes).
Experiments on 11 programs totaling 319KLoC show 3C
to be effective at inferring checked pointer types, and experience
with previously and newly ported code finds 3C works well when
combined with human-driven refactoring.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/MooreHN01.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/MooreHN01.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Practical Programmable Packets&lt;/b>.
Jonathan T. Moore, Michael Hicks, and Scott Nettles.
In &lt;em>Proceedings of the Twentieth IEEE Computer and
Communication Society INFOCOM Conference&lt;/em>, pages 41&amp;ndash;50. IEEE, April
2001.&lt;/font>&lt;p>
We present SNAP (Safe and Nimble Active Packets), a new scheme for
programmable (or &lt;em>active&lt;/em>) packets centered around a new low-level
packet language. Unlike previous active packet approaches, SNAP is &lt;em>
practical&lt;/em>: namely, adding significant &lt;em>flexibility&lt;/em> over IP without
compromising &lt;em>safety and security&lt;/em> or &lt;em>efficiency&lt;/em>. In this work we
compare SNAP&amp;rsquo;s flexibility to other active packet systems, give proof
sketches of its novel approach to resource control, and present experimental
data showing SNAP attains performance extremely close to that of a software
IP router.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/MooreHN99.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/MooreHN99.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Chunks in PLAN: Language Support for Programs as Packets&lt;/b>.
Jonathan T. Moore, Michael Hicks, and Scott M. Nettles.
In &lt;em>Proceedings of the 37th Annual Allerton Conference on
Communication, Control, and Computing&lt;/em>, September 1999.&lt;/font>&lt;p>
&lt;em>Chunks&lt;/em> are a programming construct in PLAN, the Packet Language for
Active Networks, comprised of a code segment and a suspended function call.
In PLAN, chunks provide support for encapsulation and other packet
programming techniques. This paper begins by explaining the semantics and
implementation of chunks. We proceed, using several PLAN source code
examples, to demonstrate the usefulness of chunks for micro-protocols,
asynchronous adaptation, and as units of authentication granularity.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/neamtiu06dsutr.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/neamtiu06dsutr.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Practical Dynamic Software Updating for C (Extended version)&lt;/b>.
Iulian Neamtiu, Michael Hicks, Gareth Stoyle, and Manuel Oriol.
Technical Report CS-TR-4790, Department of Computer Science,
University of Maryland, March 2006.
Extended version of PLDI 06 paper.&lt;/font>&lt;p>&lt;p>[ &lt;a href="http://www.cs.umd.edu/projects/dsu/">http&lt;/a> ]
&lt;a name="neamtiu06dsutr">&lt;/a>&lt;pre>
@techreport{neamtiu06dsutr,
author = { Iulian Neamtiu and Michael Hicks and Gareth Stoyle and Manuel Oriol},
title = {Practical Dynamic Software Updating for {C} (Extended version)},
institution = {Department of Computer Science, University of Maryland},
number = {CS-TR-4790},
year = 2006,
month = {March},
note = {Extended version of PLDI 06 paper},
http = {&lt;a href="http://www.cs.umd.edu/projects/dsu/">
&lt;a href="http://www.cs.umd.edu/projects/dsu/" target="_blank" rel="noopener">http://www.cs.umd.edu/projects/dsu/&lt;/a>&lt;/a>}
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/parker19lweb.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/parker19lweb.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>LWeb: Information Flow Security for Multi-Tier Web Applications&lt;/b>.
James Parker, Niki Vazou, and Michael Hicks.
In &lt;em>Proceedings of the ACM Conference on Principles of
Programming Languages (POPL)&lt;/em>, January 2019.&lt;/font>&lt;p>
This paper presents LWeb, a framework for enforcing label-based,
information flow policies in database-using web applications. In a
nutshell, LWeb marries the LIO Haskell IFC enforcement library
with the Yesod web programming framework. The implementation has
two parts. First, we extract the core of LIO into a monad
transformer (LMonad) and then apply it to Yesod&amp;rsquo;s core monad. Second,
we extend Yesod&amp;rsquo;s table definition DSL and query functionality to
permit defining and enforcing label-based policies on tables and enforcing
them during query processing. LWeb&amp;rsquo;s policy language is expressive,
permitting dynamic per-table and per-row policies. We formalize the
essence of LWeb in the LWebcalc calculus and mechanize the proof of
noninterference in Liquid Haskell. This mechanization constitutes
the first metatheoretic proof carried out in Liquid Haskell. We also
used LWeb to build a substantial web site hosting the &lt;em>Build it,
Break it, Fix it&lt;/em> security-oriented programming contest. The site
involves 40 data tables and sophisticated policies. Compared to
manually checking security policies, LWeb imposes a modest runtime
overhead of between 2% to 21%. It reduces
the trusted code base from the whole application to just 1% of the
application code, and 21% of the code overall (when counting LWeb too).&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/peng2022shors.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/peng2022shors.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>A Formally Certified End-to-End Implementation of Shor&amp;rsquo;s Factorization
Algorithm&lt;/b>.
Yuxiang Peng, Kesha Hietala, Runzhou Tao, Liyi Li, Robert Rand,
Michael Hicks, and Xiaodi Wu.
&lt;em>Proceedings of the National Academy of Sciences&lt;/em>, 120(21), May
2023.
Preprint at &lt;a href="https://arxiv.org/abs/2204.07112">
&lt;a href="https://arxiv.org/abs/2204.07112" target="_blank" rel="noopener">https://arxiv.org/abs/2204.07112&lt;/a>&lt;/a>.&lt;/font>&lt;p>
Quantum computing technology may soon deliver revolutionary improvements in algorithmic performance, but it is useful only if computed answers are correct. While hardware-level decoherence errors have garnered significant attention, a less recognized obstacle to correctness is that of human programming errors&amp;mdash;“bugs.” Techniques familiar to most programmers from the classical domain for avoiding, discovering, and diagnosing bugs do not easily transfer, at scale, to the quantum domain because of its unique characteristics. To address this problem, we have been working to adapt formal methods to quantum programming. With such methods, a programmer writes a mathematical specification alongside the program and semiautomatically proves the program correct with respect to it. The proof&amp;rsquo;s validity is automatically confirmed certified by a “proof assistant.” Formal methods have successfully yielded high-assurance classical software artifacts, and the underlying technology has produced certified proofs of major mathematical theorems. As a demonstration of the feasibility of applying formal methods to quantum programming, we present a formally certified end-to-end implementation of Shor&amp;rsquo;s prime factorization algorithm, developed as part of a framework for applying the certified approach to general applications. By leveraging our framework, one can significantly reduce the effects of human errors and obtain a high-assurance implementation of large-scale quantum applications in a principled way.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/pierce20carbon.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/pierce20carbon.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Conferences in an Era of Expensive Carbon&lt;/b>.
Benjamin Pierce, Michael Hicks, Crista Lopes, and Jens Palsberg.
&lt;em>Communications of the ACM&lt;/em>, March 2020.
Preprint at &lt;a href="https://www.cs.umd.edu/~mwh/papers/co2acm.pdf">
&lt;a href="https://www.cs.umd.edu/~mwh/papers/co2acm.pdf" target="_blank" rel="noopener">https://www.cs.umd.edu/~mwh/papers/co2acm.pdf&lt;/a>&lt;/a>.&lt;/font>&lt;p>Air travel is a significant source of greenhouse gas emissions when tallied per traveler. This means that for many scientists, travel to conferences may be a substantial or even dominant part of their individual contribution to climate change. What should ACM do, in recognition of this situation? Two years ago, SIGPLAN convened an ad hoc Climate Committee to research this question; we are its members. After investigating many options and intensive and wide-ranging discussions, we are putting forward two concrete proposals. First, all ACM conferences should publicly account for the greenhouse gases emitted as a result of putting them on. Second, ACM should put a price on carbon in conference budgets, to create pressure on organizers to reduce their footprints.&lt;p>[ &lt;a href="https://cacm.acm.org/magazines/2020/3/243024-conferences-in-an-era-of-expensive-carbon/abstract">http&lt;/a> ]
&lt;a name="pierce20carbon">&lt;/a>&lt;pre>
@article{pierce20carbon,
author = {Benjamin Pierce and Michael Hicks and Crista Lopes and Jens Palsberg},
title = {Conferences in an Era of Expensive Carbon},
journal = {Communications of the {ACM}},
month = mar,
year = 2020,
note = {Preprint at \url{https://www.cs.umd.edu/~mwh/papers/co2acm.pdf}}
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/ran19sqire.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/ran19sqire.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Verified Optimization in a Quantum Intermediate Representation&lt;/b>.
Kesha Hietala, Robert Rand, Shih-Han Hung, Xiaodi Wu, and Michael
Hicks, June 2019.
Extended abstract appeared at QPL 2019.&lt;/font>&lt;p>
We present sqire, a low-level language for quantum computing and verification. sqire uses a global register of quantum bits, allowing easy compilation to and from existing `quantum assembly&amp;rsquo; languages and simplifying the verification process. We demonstrate the power of sqire as an intermediate representation of quantum programs by verifying a number of useful optimizations, and we demonstrate sqire&amp;rsquo;s use as a tool for general verification by proving several quantum programs correct.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/rand19qplperspective.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/rand19qplperspective.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Formal Verification vs. Quantum Uncertainty&lt;/b>.
Robert Rand, Kesha Hietala, and Michael Hicks.
In Benjamin S. Lerner, Rastislav Bodík, and Shriram
Krishnamurthi, editors, &lt;em>3rd Summit on Advances in Programming Languages
(SNAPL 2019)&lt;/em>, volume 136 of &lt;em>Leibniz International Proceedings in
Informatics (LIPIcs)&lt;/em>, pages 12:1&amp;ndash;12:11, Dagstuhl, Germany, May 2019.
Schloss Dagstuhl&amp;ndash;Leibniz-Zentrum fuer Informatik.&lt;/font>&lt;p>
Quantum programming is hard: Quantum programs are necessarily probabilistic and impossible to examine without disrupting the execution of a program. In response to this challenge, we and a number of other researchers have written tools to verify quantum programs against their intended semantics. &lt;em>This is not enough.&lt;/em> Verifying an idealized semantics against a real world quantum program doesn&amp;rsquo;t allow you to confidently predict the program&amp;rsquo;s output. In order to have verification that works, you need both an error semantics related to the hardware at hand (this is necessarily low level) and certified compilation to the that same hardware. Once we have these two things, we can talk about an approach to quantum programming where we start by writing and verifying programs at a high level, attempt to verify properties of the compiled code, and repeat as necessary.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/rastogi16wysstar.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/rastogi16wysstar.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Wys&lt;sup>&lt;em>&lt;/sup>: A Verified Language Extension for Secure Multi-Party
Computations&lt;/b>.
Aseem Rastogi, Nikhil Swamy, and Michael Hicks.
Technical Report abs/1711.06467, CoRR, November 2017.&lt;/font>&lt;p>
Secure multi-party computation (MPC) enables a set of mutually
distrusting parties to cooperatively compute, using a cryptographic
protocol, a function over their private data.
This paper presents Wys&lt;sup>&lt;/em>&lt;/sup>, a new domain-specific language (DSL)
implementation for
writing MPCs. Wys&lt;sup>&lt;em>&lt;/sup> is a
&lt;em>Verified, Domain-Specific Integrated Language Extension&lt;/em>
(VDSILE), a new kind of embedded DSL hosted in F&lt;sup>&lt;/em>&lt;/sup>, a
full-featured, verification-oriented programming language.
Wys&lt;sup>&lt;em>&lt;/sup> source programs are
essentially F&lt;sup>&lt;/em>&lt;/sup> programs written against an MPC library, meaning
that the programmers can use F&lt;sup>&lt;em>&lt;/sup>&amp;rsquo;s logic to verify the correctness
and security properties of their programs. To reason about the
distributed semantics of these programs, we formalize a deep
embedding of Wys&lt;sup>&lt;/em>&lt;/sup>, also in F&lt;sup>&lt;em>&lt;/sup>. We mechanize the necessary
metatheory to prove that the properties verified for the Wys&lt;sup>&lt;/em>&lt;/sup>
source programs carry over to the distributed, multi-party
semantics. Finally, we use F&lt;sup>&lt;em>&lt;/sup>&amp;rsquo;s extraction mechanism to
extract an interpreter that we have proved matches this semantics,
yielding a verified implementation. Indeed, Wys&lt;sup>&lt;/em>&lt;/sup> is the first
DSL to enable formal verification of source MPC programs, and also the
first MPC DSL to provide a verified implementation.
With Wys&lt;sup>*&lt;/sup> we have implemented several MPC protocols, including
private set intersection, joint median, and an MPC-based card dealing
application, and have verified their security and correctness.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/ruef15bibifiNW.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/ruef15bibifiNW.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Build it, break it, fix it: Competing to build secure systems&lt;/b>.
Andrew Ruef and Michael Hicks.
&lt;em>The Next Wave&lt;/em>, 21(1):19&amp;ndash;23, 2015.&lt;/font>&lt;p> We have a long legacy of failing to build secure
systems; can a coding competition give us insight
into what we can do better? This article presents an
overview of the Build-it, Break-it, Fix-it
Security-oriented programming competition. &lt;p>[ &lt;a href="https://www.nsa.gov/resources/everyone/digital-media-center/publications/the-next-wave/assets/files/TNW-21-1.pdf">.pdf&lt;/a> ]
&lt;a name="ruef15bibifiNW">&lt;/a>&lt;pre>
@article{ruef15bibifiNW,
author = {Andrew Ruef and Michael Hicks},
journal = {The Next Wave},
title = {Build it, break it, fix it: Competing to build secure systems},
volume = 21,
number = 1,
pages = {19&amp;ndash;23},
year = 2015,
mon = oct
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/ruef2016bibifi.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/ruef2016bibifi.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Build It, Break It, Fix It: Contesting Secure Development&lt;/b>.
Andrew Ruef, Michael Hicks, James Parker, Dave Levin, Michelle L.
Mazurek, and Piotr Mardziel.
In &lt;em>Proceedings of the ACM Conference on Computer and
Communications Security (CCS)&lt;/em>, October 2016.&lt;/font>&lt;p>
Typical security contests focus on breaking or mitigating the impact
of buggy systems. We present the Build-it, Break-it, Fix-it
(BIBIFI) contest, which aims to assess the ability to securely
build software, not just break it. In BIBIFI, teams build specified
software with the goal of maximizing correctness, performance, and
security. The latter is tested when teams attempt to break other
teams&amp;rsquo; submissions. Winners are chosen from among the best builders
and the best breakers. BIBIFI was designed to be open-ended&amp;mdash;teams
can use any language, tool, process, etc. that they like. As such,
contest outcomes shed light on factors that correlate with
successfully building secure software and breaking insecure
software. During 2015, we ran three contests involving a total of 116
teams and two different programming problems. Quantitative analysis
from these contests found that the most efficient build-it
submissions used C/C++, but submissions coded in other statically-typed
languages were less likely to have a security flaw; build-it teams
with diverse programming-language knowledge also produced more
secure code. Shorter programs correlated with better
scores. Break-it teams that were also successful build-it teams were
significantly better at finding security bugs.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/swamy07fableTR.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/swamy07fableTR.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Fable: A Language for Enforcing User-defined Security Policies&lt;/b>.
Nikhil Swamy, Brian J. Corcoran, and Michael Hicks.
Technical Report CS-TR-4895, University of Maryland, Department of
Computer Science, November 2007.
Full version of Oakland 08 paper.&lt;/font>&lt;p>
This paper presents Fable, a core formalism for a programming language
in which programmers may specify security policies and reason that
these policies are properly enforced. In Fable,
security policies can be expressed by associating &lt;em>security
labels&lt;/em> with the data or actions they protect. Programmers define the
semantics of labels in a separate part of the program called the
&lt;em>enforcement policy&lt;/em>. Fable prevents a policy from being circumvented
by allowing labeled terms to be manipulated only within the enforcement
policy; application code must treat labeled values abstractly.
Together, these features
facilitate straightforward proofs that programs implementing a
particular policy achieve their high-level security goals. Fable is
flexible enough to implement a wide variety of security policies,
including access control, information flow, provenance, and security
automata. We have implemented Fable as part of the Links web
programming language; we call the resulting language SELinks. We
report on our experience using SElinks to build two substantial
applications, a wiki and an on-line store, equipped with a combination of
access control and provenance policies.
To our knowledge, no existing framework enables
the enforcement of such a wide variety of security policies with an
equally high level of assurance.
&lt;p>[ &lt;a href="http://www.cs.umd.edu/~nswamy/papers/fable-tr.pdf">.pdf&lt;/a> ]
&lt;a name="swamy07fableTR">&lt;/a>&lt;pre>
@techreport{swamy07fableTR,
author = {Nikhil Swamy and Brian J. Corcoran and Michael Hicks},
institution = {University of Maryland, Department of Computer Science},
number = {CS-TR-4895},
title = {Fable: A Language for Enforcing User-defined Security Policies},
year = 2007,
month = nov,
note = {Full version of Oakland 08 paper}
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/swamy08airTR.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/swamy08airTR.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Verified Enforcement of Automaton-based Information Release Policies&lt;/b>.
Nikhil Swamy and Michael Hicks.
Technical Report CS-TR-4906, University of Maryland, Department of
Computer Science, 2008.
Full version of PLAS 08 paper.&lt;/font>&lt;p>
Many organizations specify &lt;em>information release&lt;/em> policies to
describe the terms under which sensitive information may be released
to other organizations. This paper presents a new approach for
ensuring that security-critical software correctly enforces its
information release policy. Our approach has two parts. First, an
information release policy is specified as a security automaton
written in a new language called AIR. Second, we enforce an AIR
policy by translating it into an API for programs written in Lair,
a core formalism for a functional programming language. Lair uses
a novel combination of dependent, affine, and singleton types to
ensure that the API is used correctly. As a consequence we can
certify that programs written in Lair meet the requirements of
the original AIR policy specification.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/swamy11monadTR.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/swamy11monadTR.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Lightweight Monadic Programming in ML&lt;/b>.
Nikhil Swamy, Nataliya Guts, Daan Leijen, and Michael Hicks.
Technical Report MSR-TR-2011-039, Microsoft Research, May 2011.&lt;/font>&lt;p>
Many useful programming constructions can be expressed as monads.
Examples include probabilistic computations,
time-varying expressions, parsers, and information flow tracking,
not to mention effectful features like state and I/O. In this
paper, we present a type-based rewriting algorithm to make
programming with arbitrary monads as easy as using ML&amp;rsquo;s built-in
support for state and I/O. Developers write programs using monadic
values of type &lt;em>M&lt;/em> &lt;em>t&lt;/em> as if they were of type &lt;em>t&lt;/em>, and our algorithm
inserts the necessary binds, units, and monad-to-monad morphisms so
that the program typechecks. Our algorithm is based on Jones'
qualified types and enjoys three useful properties: (1) principal
types, i.e., the rewriting we perform is the most general; (2)
coherence, i.e., thanks to the monad and morphism laws, all
instances of the principal rewriting have the same semantics; (3)
decidability; i.e., the solver for generated constraints will always
terminate. Throughout the paper we present simple examples from the
domains listed above. Our most complete example, which illustrates
the expressive power of our system, proves that ML programs
rewritten by our algorithm to use the information flow monad are
equivalent to programs in FlowCaml, a domain-specific information
flow tracking language.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/trilla20probprog.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/trilla20probprog.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Probabilistic Abstract Interpretation: Sound Inference and Application to
Privacy&lt;/b>.
Jose Manuel Calderón Trilla, Michael Hicks, Stephen Magill, Piotr
Mardziel, and Ian Sweet.
In Gilles Barthe, Joost-Pieter Katoen, and Alexandra Silva, editors,
&lt;em>Foundations of Probabilistic Programming&lt;/em>, chapter 11, pages 361&amp;ndash;389.
Cambridge University Press, November 2020.&lt;/font>&lt;p>
Bayesian probability models uncertain knowledge and learning from observations. As a defining feature of optimal adversarial behaviour, Bayesian reasoning forms the basis of safety properties in contexts such as privacy and fairness. Probabilistic programming is a convenient implementation of Bayesian reasoning but the adversarial setting imposes obstacles to its use: approximate inference can underestimate adversary knowledge and exact inference is impractical in cases covering large state spaces.&lt;p>
By abstracting distributions, the semantics of a probabilistic language, and inference, jointly termed &lt;em>probabilistic abstract interpretation&lt;/em>, we demonstrate adversary models both approximate and sound.&lt;p>
We apply the techniques to build a privacy protecting monitor and describe how to trade off the precision and computational cost in its implementation all the while remaining sound with respect to privacy risk bounds.&lt;p>[ &lt;a href="https://www.cambridge.org/core/books/foundations-of-probabilistic-programming/819623B1B5B33836476618AC0621F0EE">http&lt;/a> ]
&lt;a name="trilla20probprog">&lt;/a>&lt;pre>
@incollection{trilla20probprog,
title = {Probabilistic Abstract Interpretation: Sound Inference and Application to Privacy},
booktitle = {Foundations of Probabilistic Programming},
author = {Jose Manuel Calder'{o}n Trilla and Michael Hicks and Stephen Magill and Piotr Mardziel and Ian Sweet},
editor = {Gilles Barthe and Joost-Pieter Katoen and Alexandra Silva},
chapter = 11,
pages = {361&amp;ndash;389},
month = nov,
year = 2020,
publisher = {Cambridge University Press}
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/votipka19bibifiqual.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/votipka19bibifiqual.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Understanding security mistakes developers make: Qualitative analysis from
Build It, Break It, Fix It&lt;/b>.
Daniel Votipka, Kelsey Fulton, James Parker, Matthew Hou, Michelle L.
Mazurek, and Michael Hicks.
In &lt;em>Proceedings of the USENIX Security Symposium (USENIX SEC)&lt;/em>,
August 2020.
&lt;b>Distinguished Paper&lt;/b>.&lt;/font>&lt;p>
Secure software development is a challenging task requiring consideration of many possible threats and mitigations.
This paper investigates how and why programmers, despite a
baseline of security experience, make security-relevant errors.
To do this, we conducted an in-depth analysis of 94 submissions to a secure-programming contest designed to mimic
real-world constraints: correctness, performance, and security.
In addition to writing secure code, participants were asked
to search for vulnerabilities in other teams&amp;rsquo; programs; in total, teams submitted 866 exploits against the submissions we
considered. Over an intensive six-month period, we used iterative open coding to manually, but systematically, characterize
each submitted project and vulnerability (including vulnerabilities we identified ourselves). We labeled vulnerabilities
by type, attacker control allowed, and ease of exploitation,
and projects according to security implementation strategy.
Several patterns emerged. For example, simple mistakes were
least common: only 21% of projects introduced such an error.
Conversely, vulnerabilities arising from a misunderstanding
of security concepts were significantly more common, appearing in 78% of projects. Our results have implications for
improving secure-programming APIs, API documentation,
vulnerability-finding tools, and security education.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/votipka20bibifilogin.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/votipka20bibifilogin.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Build It, Break It, Fix It Contests: Motivated Developers Still Make
Security Mistakes&lt;/b>.
Daniel Votipka, Kelsey R. Fulton, James Parker, Matthew Hou,
Michelle L. Mazurek, and Michael Hicks.
&lt;em>;login;&lt;/em>, 45(4), winter 2020.&lt;/font>&lt;p>
Secure software development is a challenging task requiring consideration of many possible threats and mitigations. We reviewed code submitted by 94 teams in a secure-programming contest designed to mimic real-world constraints—correctness, performance, and security. We found that the competitors, many of whom were experienced programmers and had just completed a 24-week cybersecurity course sequence with specific instruction on secure coding and cryptography, still introduced several vulnerabilities (182 across all teams), mostly due to misunderstandings of security concepts. We explain our methodology, discuss trends in the types of vulnerabilities introduced, and offer suggestions for avoiding the kinds of problems we encountered.&lt;p>[ &lt;a href="https://www.usenix.org/publications/login/winter2020/votipka">http&lt;/a> ]
&lt;a name="votipka20bibifilogin">&lt;/a>&lt;pre>
@article{votipka20bibifilogin,
title = {Build It, Break It, Fix It Contests: Motivated Developers Still Make Security Mistakes},
journal = {;login;},
month = {winter},
year = 2020,
volume = {45},
number = {4},
author = {Daniel Votipka and Kelsey R. Fulton and James Parker and Matthew Hou and Michelle L. Mazurek and Michael Hicks}
}
&lt;/pre>&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/zhang23fuzzoptions.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/zhang23fuzzoptions.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Fuzzing Configurations of Program Options&lt;/b>.
Zenong Zhang, George Klees, Eric Wang, Michael Hicks, and Shiyi Wei.
&lt;em>ACM Transactions on Software Engineering and Methodology
(TOSEM)&lt;/em>, 32(2), March 2023.
A shorter version appeared at the 2022 Fuzzing Workshop.&lt;/font>&lt;p>
While many real-world programs are shipped with configurations to enable/disable functionalities, fuzzers have mostly been applied to test single configurations of these programs. In this work, we first conduct an empirical study to understand how program configurations affect fuzzing performance. We find that limiting a campaign to a single configuration can result in failing to cover a significant amount of code. We also observe that different program configurations contribute differing amounts of code coverage, challenging the idea that each one can be efficiently fuzzed individually. Motivated by these two observations, we propose ConfigFuzz , which can fuzz configurations along with normal inputs. ConfigFuzz transforms the target program to encode its program options within part of the fuzzable input, so existing fuzzers&amp;rsquo; mutation operators can be reused to fuzz program configurations. We instantiate ConfigFuzz on six configurable, common fuzzing targets, and integrate their executions in FuzzBench. In our evaluation, ConfigFuzz outperforms two baseline fuzzers in four targets, while the results are mixed in the other targets due to program size and configuration space. We also analyze the options fuzzed by ConfigFuzz and how they affect the performance.&lt;/p></description></item><item><title>Publication</title><link>https://mhicks.me/papers/zhou23fatpointers.html</link><pubDate>Sat, 11 Oct 2025 16:07:06 -0400</pubDate><guid>https://mhicks.me/papers/zhou23fatpointers.html</guid><description>&lt;p>&lt;font size="+1">&lt;b>Fat Pointers for Temporal Memory Safety of C&lt;/b>.
Jie Zhou, John Criswell, and Michael Hicks.
In &lt;em>Proceedings of the ACM Conference on Object-Oriented
Programming Languages, Systems, and Applications (OOPSLA)&lt;/em>, April 2023.&lt;/font>&lt;p>
Temporal memory safety bugs, especially use-after-free and double free bugs, pose a major security threat to C programs. Real-world exploits utilizing these bugs enable attackers to read and write arbitrary memory locations, causing disastrous violations of confidentiality, integrity, and availability. Many previous solutions retrofit temporal memory safety to C, but they all either incur high performance overhead and/or miss detecting certain types of temporal memory safety bugs.&lt;p>
In this paper, we propose a temporal memory safety solution that is both efficient and comprehensive. Specifically, we extend Checked C, a spatially-safe extension to C, with temporally-safe pointers. These are implemented by combining two techniques: fat pointers and dynamic key-lock checks. We show that the fat-pointer solution significantly improves running time and memory overhead compared to the disjoint-metadata approach that provides the same level of protection. With empirical program data and hands-on experience porting real-world applications, we also show that our solution is practical in terms of backward compatibility &amp;ndash; one of the major complaints about fat pointers.&lt;p>[ &lt;a href="http://arxiv.org/abs/2208.12900">arXiv&lt;/a> ]
&lt;a name="zhou23fatpointers">&lt;/a>&lt;pre>
@inproceedings{zhou23fatpointers,
author = {Jie Zhou and John Criswell and Michael Hicks},
title = {Fat Pointers for Temporal Memory Safety of C},
booktitle = {Proceedings of the {ACM} Conference on Object-Oriented Programming Languages, Systems, and Applications (OOPSLA)},
year = {2023},
eprint = {2208.12900},
archiveprefix = {arXiv},
month = apr
}
&lt;/pre>&lt;/p></description></item><item><title>Contact</title><link>https://mhicks.me/contact/</link><pubDate>Wed, 01 Oct 2025 00:00:00 +0000</pubDate><guid>https://mhicks.me/contact/</guid><description>&lt;script src="https://mhicks.me/email.js" type="text/javascript">&lt;/script>
&lt;script>var key = 42&lt;/script>
&lt;div style="text-align: left; margin: 2rem 0;">
 &lt;a href="https://linkedin.com/in/mike-hicks-a053311/" target="_blank" rel="noopener" style="font-size: 3rem; margin: 0 1rem 0 0; color: #0077b5;">&lt;i class="fab fa-linkedin">&lt;/i>&lt;/a>
 &lt;a href="https://github.com/mwhicks1" target="_blank" rel="noopener" style="font-size: 3rem; margin: 0 1rem 0 0; color: #333;">&lt;i class="fab fa-github">&lt;/i>&lt;/a>
 &lt;a href="https://scholar.google.com/citations?user=Gggzp7UAAAAJ" target="_blank" rel="noopener" style="font-size: 3rem; margin: 0 1rem 0 0; color: #4285f4;">&lt;i class="ai ai-google-scholar">&lt;/i>&lt;/a>
 &lt;a href="https://dblp.org/pid/h/MichaelWHicks.html" target="_blank" rel="noopener" style="font-size: 3rem; margin: 0 1rem 0 0; color: #004f9f;">&lt;i class="ai ai-dblp">&lt;/i>&lt;/a>
 &lt;a href="https://orcid.org/0000-0002-2759-9223" target="_blank" rel="noopener" style="font-size: 3rem; margin: 0 1rem 0 0; color: #a6ce39;">&lt;i class="ai ai-orcid">&lt;/i>&lt;/a>
&lt;/div>
&lt;div style="font-size: 1.25rem; line-height: 1.6;">
&lt;p>&lt;strong>Address:&lt;/strong>
University of Pennsylvania&lt;br>
Dept. of Computer &amp;amp; Information Science&lt;br>
3330 Walnut Street&lt;br>
Philadelphia, PA 19104&lt;/p></description></item><item><title>Empirical Security &amp; Privacy, for Humans</title><link>https://mhicks.me/courses/cis-7000-fall2025/</link><pubDate>Mon, 01 Sep 2025 00:00:00 +0000</pubDate><guid>https://mhicks.me/courses/cis-7000-fall2025/</guid><description>&lt;h2 id="about">About
 &lt;a href="#about">&lt;svg class="anchor-symbol" aria-hidden="true" height="26" width="26" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg">
 &lt;path d="M0 0h24v24H0z" fill="currentColor">&lt;/path>
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76.0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71.0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71.0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76.0 5-2.24 5-5s-2.24-5-5-5z">&lt;/path>
 &lt;/svg>&lt;/a>
&lt;/h2>
&lt;p>Since the development of time-sharing computer systems 50+ years ago, computer scientists have been working on how to secure them. Today, the computer security industry is massive. Participants across government, academia, and industry are making significant investments and producing impressive technology. Given all this, are computer systems actually getting more secure? How would we know? What research and other work is being done to both understand and address the situation?&lt;/p></description></item><item><title>Software Security</title><link>https://mhicks.me/courses/software-security/</link><pubDate>Thu, 01 Jan 2015 00:00:00 +0000</pubDate><guid>https://mhicks.me/courses/software-security/</guid><description>&lt;h2 id="overview">Overview
 &lt;a href="#overview">&lt;svg class="anchor-symbol" aria-hidden="true" height="26" width="26" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg">
 &lt;path d="M0 0h24v24H0z" fill="currentColor">&lt;/path>
 &lt;path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76.0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71.0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71.0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76.0 5-2.24 5-5s-2.24-5-5-5z">&lt;/path>
 &lt;/svg>&lt;/a>
&lt;/h2>
&lt;p>This course, originally developed in late 2014 and early 2015 for 
&lt;a href="https://coursera.org/" target="_blank" rel="noopener">Coursera&lt;/a> as part of the 
&lt;a href="https://www.umd.edu/" target="_blank" rel="noopener">University of Maryland&lt;/a>&amp;rsquo;s four-course specialization on cybersecurity, explores the &lt;strong>foundations of software security&lt;/strong>. The course is old enough now that I don&amp;rsquo;t feel comfortable charging money for it, so it is here hosted for free. All of the videos are collected on a 
&lt;a href="https://www.youtube.com/channel/UCLnvPv3HJdKJ8CYnNcFLUgw" target="_blank" rel="noopener">Youtube channel, Software Security&lt;/a>.&lt;/p></description></item></channel></rss>