%% -*- mode: BibTeX -*-
%%
%% Eric Eide <eeide at cs.utah.edu>
%% $Id: index.bib,v 1.63 2009/06/23 14:13:33 eeide Exp $
%%
%% File index.bib
%%
%% This BibTeX file is processed through `bib2html' to produce the HTML version
%% of my list of publications.
%%
%% The records are somewhat specialized for `bib2html' but should be generally
%% usable in other contexts.  The special `bib2html'-isms include these idioms:
%%
%%   + the special `abstract', `url', `postscript', `pdf', and `dvi' fields;
%%   + avoiding `cross-ref' to factor out common fields (e.g., proceedings),
%%     because we don't want a record for the proceeding themselves in the
%%     generated bibliography;
%%   + avoiding TeX-isms that `bib2html' doesn't understand, such as defining
%%     typesetting commands in the BibTeX preamble (e.g., `\IDL{}');
%%   + placing `\par' between paragraphs of the abstracts; and
%%   + using `\htmladdnormallink' to convince `bib2html' to insert extra links.
%%
%% For more about `bib2html': <http://pertsserver.cs.uiuc.edu/~hull/bib2html/>.
%%

%%
%% Some of my publications are copyrighted by the Association for Computing
%% Machinery (ACM), Inc.  My posting of these works is allowed under the ACM
%% Interim Copyright Policy as described below.
%%
%% The ACM Interim Copyright Policy is available on the World Wide Web at
%% <http://www.acm.org/pubs/copyright_policy/>.  As of this writing, the policy
%% is at version 3, last revised on December 18, 1998.  See ``Changes in ACM's
%% Revised Copyright Policy,'' _Communications_of_the_ACM_, 42(6), June 1999,
%% for a description of the policy.
%%
%% Section 3.1 of the policy states:
%%
%%   ``As part of a copyright transfer to ACM, the original copyright holders
%%   (authors or authors' employer) retain: [...] the right to post their own
%%   author-versions of preprints and revisions, including versions covered by
%%   ACM copyright but not versions downloaded from the ACM Digital Library, in
%%   a personal collection on their own or their employer's server.  Such
%%   copies must be limited to noncommercial distributions and personal use by
%%   others and must include (1) the ACM copyright notice, (2) a full citation
%%   (in standard bibliographic style) to the ACM publication, (3) a hot link
%%   (or citation) to the definitive copy in ACM's Digital Library, and (4) a
%%   notice that the copy is posted by permission of ACM and may not be
%%   redistributed.''
%%
%% Section 2.2 of the policy states:
%%
%%    ``The ACM copyright notice must be displayed on the first page or initial
%%    screen of a display of all works copyrighted by ACM, whether those works
%%    are published in print or in a digital medium.  It is acceptable to place
%%    the string `(c) Copyright 199x by ACM, Inc.' as a hypertext link to the
%%    full copyright notice, <http://info.acm.org/pubs/toc/CRnotice.html>.''
%%
%% I have attempted to comply with these rules in this list of publications.
%%

%%
%% Some of my publications are copyrighted by the Institute of Electrical and
%% Electronics Engineers (IEEE), Incorporated.  My posting of these works is
%% allowed under the IEEE copyright policy as described below.
%%
%% The IEEE Policy and Procedures Manual, Section 6.2.10 ``Electronic
%% Information Dissemination,'' is available on the World Wide Web (at a long
%% URL, not included here).  Section 6.2.10.D reads:
%%
%%   D. Personal Servers.  Authors and/or their companies shall have the right
%%      to post their IEEE-copyrighted material on their own servers without
%%      permission, provided that the server displays a prominent notice
%%      alerting readers to their obligations with respect to copyrighted
%%      material and that the posted work includes the IEEE copyright notice as
%%      shown in Policy 6.2.10A above.  An example of an acceptable notice is:
%%
%%      ``This material is presented to ensure timely dissemination of
%%      scholarly and technical work.  Copyright and all rights therein are
%%      retained by authors or by other copyright holders.  All persons copying
%%      this information are expected to adhere to the terms and constraints
%%      invoked by each author's copyright.  In most cases, these works may not
%%      be reposted without the explicit permission of the copyright holder.''
%%
%% I have attempted to comply with this policy in this list of publications.
%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%
%%%% Strings.
%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

@string{ACM
  = "{Association for Computing Machinery}"}

@string{_ACM_COPYRIGHT_PERMISSION
  = "Posted by permission of ACM; the copies posted here may not be
     redistributed."}

%% Unfortunately, it doesn't work to use this macro in the links below.
@string{_ACM_COPYRIGHT_URL
  = "http://info.acm.org/pubs/toc/CRnotice.html"}

@string{ACM_COPYRIGHT_1995
  = "{\htmladdnormallink{\copyright\ Copyright 1995 by ACM, Inc.}{http://www.acm.org/pubs/copyright_policy/#Notice}}  "
    # _ACM_COPYRIGHT_PERMISSION}

@string{ACM_COPYRIGHT_1997
  = "{\htmladdnormallink{\copyright\ Copyright 1997 by ACM, Inc.}{http://www.acm.org/pubs/copyright_policy/#Notice}}  "
    # _ACM_COPYRIGHT_PERMISSION}

@string{ACM_COPYRIGHT_2002
  = "{\htmladdnormallink{\copyright\ Copyright 2002 by ACM, Inc.}{http://www.acm.org/pubs/copyright_policy/#Notice}}  "
    # _ACM_COPYRIGHT_PERMISSION}

@string{ACM_COPYRIGHT_2006
  = "{\htmladdnormallink{\copyright\ Copyright 2006 by ACM, Inc.}{http://www.acm.org/pubs/copyright_policy/#Notice}}  "
    # _ACM_COPYRIGHT_PERMISSION}

@string{ACM_COPYRIGHT_2007
  = "{\htmladdnormallink{\copyright\ Copyright 2007 by ACM, Inc.}{http://www.acm.org/pubs/copyright_policy/#Notice}}  "
    # _ACM_COPYRIGHT_PERMISSION}

@string{ACM_COPYRIGHT_2008
  = "{\htmladdnormallink{\copyright\ Copyright 2008 by ACM, Inc.}{http://www.acm.org/pubs/copyright_policy/#Notice}}  "
    # _ACM_COPYRIGHT_PERMISSION}

@string{AOSD08
  = "Proceedings of the 7th International Conference on Aspect-Oriented
     Software Development
     ({\htmladdnormallink{AOSD~2008}{http://aosd.net/2008/}})"}

@string{ASPLOS06_PLOS
  = "Proceedings of the Third Workshop on Programming Languages and Operating
     Systems ({\htmladdnormallink{PLOS~2006}{http://plosworkshop.org/2006/}})"}

@string{EMSOFT08
  = "Proceedings of the 8th ACM International Conference on Embedded Software
     ({\htmladdnormallink{EMSOFT~2008}{http://www.emsoft.org/}})"}

@string{FLUX_PAPERS
  = "http://www.cs.utah.edu/flux/papers/"}

@string{FTN
  = "Flux Technical Note"}

@string{ICSE01_WASC
  = "In the {\htmladdnormallink{Workshop on Advanced Separation of Concerns in
     Software
     Engineering}{http://www.research.ibm.com/hyperspace/workshops/icse2001/}}
     at {\htmladdnormallink{ICSE~2001}{http://www.csr.uvic.ca/icse2001/}}"}

@string{ICSE02
  = "Proceedings of the 24th International Conference on Software Engineering
     (\htmladdnormallink{ICSE~2002}{http://www.icse-conferences.org/2002/})"}

@string{IEEE_COPYRIGHT_2003
  = "\copyright\ Copyright 2003 {IEEE}"}

@string{IEEE_COPYRIGHT_2004
  = "\copyright\ Copyright 2004 {IEEE}"}

@string{LCR98
  = "Languages, Compilers, and Run-Time Systems for Scalable Computers
     ({\htmladdnormallink{LCR~'98}{http://www.cs.cmu.edu/\char'176lcr98/}})"}

@string{LNCS
  = "{\htmladdnormallink{Lecture Notes in Computer Science}{http://www.springer.de/comp/lncs/index.html}}"}

@string{NSDI07
  = "Proceedings of the Fourth {USENIX} Symposium on Networked Systems Design
     and Implementation
     ({\htmladdnormallink{NSDI~'07}{http://www.usenix.org/events/nsdi07/}})"}

@string{OOPSLA05_EA
  = "In the {\htmladdnormallink{Workshop on Early
     Aspects}{http://www.early-aspects.net/oopsla05ws/}}
     at {\htmladdnormallink{OOPSLA~2005}{http://www.oopsla.org/2005/}}"}

@string{OOPSLA05_MVCDC
  = "In the {\htmladdnormallink{Second Workshop on Managing Variabilities
     Consistently in Design and Code
     (MVCDC~2)}{http://www.kircher-schwanninger.de/workshops/MVCDC/}}
     at {\htmladdnormallink{OOPSLA~2005}{http://www.oopsla.org/2005/}}"}

@string{OPENARCH03
  = "2003~{IEEE} Conference on Open Architectures and Network Programming
     Proceedings
     (\htmladdnormallink{OPENARCH~2003}{http://www.openarch.org/})"}

@string{OSDI00
  = "Proceedings of the Fourth Symposium on Operating Systems Design and
     Implementation
     (\htmladdnormallink{OSDI~2000}{http://www.usenix.org/events/osdi2000/})"}

@string{OSR
  = "{\htmladdnormallink{Operating Systems Review}{http://www.acm.org/sigops/osr.html}}"}

@string{PLDI97
  = "Proceedings of the {ACM} {SIGPLAN} '97 Conference on Programming Language
     Design and Implementation
     ({\htmladdnormallink{PLDI}{http://www.cs.bu.edu/pub/pldi97/}})"}

@string{PLOS07
  = "Proceedings of the Fourth Workshop on Programming Languages and Operating
     Systems ({\htmladdnormallink{PLOS~2007}{http://plosworkshop.org/2007/}})"}

@string{RTAS04
  = "Proceedings of the Tenth {IEEE} Real-Time and Embedded Technology and
     Applications Symposium
     ({\htmladdnormallink{RTAS~2004}{http://www.cs.virginia.edu/rtas04/}})"}

@string{SCIPROG
  = "Scientific Programming"}

@string{SENSYS07
  = "Proceedings of the Fifth ACM Conference on Embedded Networked Sensor
     Systems
     ({\htmladdnormallink{SenSys~2007}{http://sensys.acm.org/2007/}})"}

%% The SIGCSE '95 proceedings were published as an issue of _SIGCSE_Bulletin_:
%% volume 27, number 1, March 1995.  The title of the _SIGCSE_Bulletin_ issue
%% is ``The Papers of...''.  Joe Zachary has a copy.
%%
@string{SIGCSE95
  = "The Papers of the 26th {SIGCSE} Technical Symposium on Computer Science
     Education ({SIGCSE~'95})"}

@string{USENIX
  = "{USENIX} Association"}

@string{USENIX06
  = "Proceedings of the 2006 {USENIX} Annual Technical Conference
     ({\htmladdnormallink{USENIX~'06}{http://www.usenix.org/events/usenix06/}})"}

@string{UUCS_TECHREPORTS
  = "http://www.cs.utah.edu/research/techreports/"}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%
%%%% The database records.
%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

@proceedings{acp4is03,
  title =	 "Proceedings of the Second {AOSD} Workshop on Aspects,
		  Components, and Patterns for Infrastructure Software",
  editor =	 "Yvonne Coady and Eric Eide and David H. Lorenz",
  year =	 2003,
  month =	 mar,
  address =	 "Boston, {MA}",
  note =	 "Published as Northeastern University College of Computer and
		  Information Science Technical Report {NU--CCIS--03--03}",

  url =		 "http://www.cs.ubc.ca/\~{}ycoady/acp4is03/",
  pdf =		 "http://www.cs.ubc.ca/\~{}ycoady/acp4is03/acp4isTR.pdf"
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% This needs work.  In the meantime, just use `note'.
%
% %string{Chakravarthy+:aosd08-copyright
%   = ACM_COPYRIGHT_2008
%     # "  "
%     # "This is the author's version of the work.  It is posted here by
%        permission of ACM for your personal use.  Not for redistribution.
%        The definitive version was published in "
%     # AOSD08 # ", "
%     # mar # "--" # apr # " 2008, "
%     # "{\url{http://doi.acm.org/10.1145/1353482.1353496}}."
% }

%% XXX --- need to put this online.
%%
@inproceedings{Chakravarthy+:aosd08,
  author =	 "Venkat Chakravarthy and John Regehr and Eric Eide",
  title =	 "Edicts: Implementing Features with Flexible Binding Times",
  booktitle =	 AOSD08,
  address =	 "Brussels, Belgium",
  year =	 2008,
  month =	 mar # "--" # apr,
  pages =	 "108--119",

  note =	 ACM_COPYRIGHT_2008
		 # "  " #
		 "The {\htmladdnormallink{definitive copy of this
		  work}{http://doi.acm.org/10.1145/1353482.1353496}}
		  is available from the ACM Digital Library.",

  xurl =	 "",
  xpostscript =	 "",
  xpdf =	 "",

  abstract =	 "In a software product line, the \emph{binding time} of a
		  feature is the time at which one decides to include or
		  exclude a feature from a product.  Typical binding site
		  implementations are intended to support a single binding time
		  only, e.g., compile time or run time.  Sometimes, however, a
		  product line must support features with variable binding
		  times.  For instance, a product line may need to include both
		  embedded system configurations, in which features are
		  selected and optimized early, and desktop configurations, in
		  which client programs choose features on demand.

		  \par We present a new technique for implementing the binding
		  sites of features that require flexible binding times.  Our
		  technique combines design patterns and aspect-oriented
		  programming: a pattern encapsulates the variation point, and
		  targeted aspects---called \emph{edicts}---set the binding
		  times of the pattern participants.  We describe our approach
		  and demonstrate its usefulness by creating a middleware
		  product line capable of serving the desktop and embedded
		  domains.  Our product line is based on JacORB, a middleware
		  platform with many dynamically configurable features.  By
		  using edicts to select features at compile time, we create a
		  version of JacORB more suited to resource-constrained
		  environments.  By configuring four JacORB subsystems via
		  edicts, we achieve a 32.2\%~reduction in code size. Our
		  examples show that our technique effectively modularizes
		  binding-time concerns, supporting both compile-time
		  optimization and run-time flexibility as needed."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% This is a `misc' (not an `inproceedings') because the workshop papers were
%% not formally published as a proceedings.
%%
%% XXX --- need to put this online.
%%
@misc{ChakravarthyEide:oopsla05-mvcdc,
  author =	 "Venkat Chakravarthy and Eric Eide",
  title =	 "Binding-Time Flexibility for Managing Variability",
  howpublished = OOPSLA05_MVCDC,
  year =	 2005,
  month =	 oct,
  note =	 "Extended abstract",

  xurl =	 "",
  xpostscript =	 "",
  xpdf =	 ""
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

@inproceedings{Cooprider+:sensys07,
  author =	 "Nathan Cooprider and Will Archer and Eric Eide and David Gay
		  and John Regehr",
  title =	 "Efficient Memory Safety for {TinyOS}",
  booktitle =	 SENSYS07,
  address =	 "Sydney, Australia",
  year =	 2007,
  month =	 nov,
  pages =	 "205--218",

  url =		 "http://www.cs.utah.edu/\~{}regehr/papers/coop-sensys07.pdf",
  pdf =		 "http://www.cs.utah.edu/\~{}regehr/papers/coop-sensys07.pdf",

  note =	 ACM_COPYRIGHT_2007
		 # "  " #
		 "The {\htmladdnormallink{definitive copy of this
		  work}{http://doi.acm.org/10.1145/1322263.1322283}}
		  is available from the ACM Digital Library.",

  abstract =	 "Reliable sensor network software is difficult to create:
		  applications are concurrent and distributed, hardware-based
		  memory protection is unavailable, and severe resource
		  constraints necessitate the use of unsafe, low-level
		  languages.  Our work improves this situation by providing
		  efficient memory and type safety for TinyOS~2 applications
		  running on the Mica2, MicaZ, and TelosB platforms.  Safe
		  execution ensures that array and pointer errors are caught
		  before they can corrupt RAM\@.  Our contributions include
		  showing that aggressive optimizations can make safe execution
		  practical in terms of resource usage; developing a technique
		  for efficiently enforcing safety under interrupt-driven
		  concurrency; extending the nesC language and compiler to
		  support safety annotations; finding previously unknown bugs
		  in TinyOS; and, finally, showing that safety can be exploited
		  to increase the availability of sensor networks applications
		  even when memory errors are left unfixed."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% XXX --- This document is obsolete.  Refer to `Eide+:usenix06' instead.
%%
@techreport{Eide+:ftn-2006-01,
  author =	 "Eric Eide and Leigh Stoller and Tim Stack and Juliana Freire
		  and Jay Lepreau",
  title =	 "Integrated Scientific Workflow Management for the {Emulab}
		  Network Testbed",
  institution =	 "University of Utah",
  year =	 2006,
  month =	 feb,
  type =	 FTN,
  number =	 "{FTN}--2006--01",
  note =	 "A revised version of this report was published in
		  \emph{Proceedings of the 2006 USENIX Annual Technical
		  Conference
		  (\htmladdnormallink{USENIX~'06}{http://www.usenix.org/events/usenix06/})}.",

  url =		 FLUX_PAPERS # "workflow-ftn2006-01-base.html",
  postscript =	 FLUX_PAPERS # "workflow-ftn2006-01.ps.gz",
  pdf =		 FLUX_PAPERS # "workflow-ftn2006-01.pdf",

  abstract =	 "The main forces that shaped current network testbeds were the
		  needs for realism and scale.  Now that several testbeds
		  support large and complex experiments, management of
		  experimentation processes and results has become more
		  difficult and a barrier to high-quality systems research.
		  The popularity of network testbeds means that new tools for
		  managing experiment workflows, addressing the ready-made base
		  of testbed users, can have important and significant impacts.

		  \par We are now evolving Emulab, our large and popular
		  network testbed, to support experiments that are organized
		  around scientific workflows.  This paper summarizes the
		  opportunities in this area, the new approaches we are taking,
		  our implementation in progress, and the challenges in
		  adapting scientific workflow concepts for testbed-based
		  research.  With our system, we expect to demonstrate that
		  network testbeds with integrated scientific workflow
		  management can be an important tool to aid research in
		  networking and distributed systems."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% XXX --- This document is obsolete.  Refer to `Eide+:nsdi07' instead.
%%
@techreport{Eide+:ftn-2006-03,
  author =	 "Eric Eide and Leigh Stoller and Jay Lepreau",
  title =	 "An Experimentation Workbench for Replayable Networking
		  Research",
  institution =	 "University of Utah",
  year =	 2006,
  month =	 dec,
  type =	 FTN,
  number =	 "{FTN}--2006--03",
  note =	 "A revised version of this report was published in
		  \emph{Proceedings of the Fourth USENIX Symposium on Networked
		  Systems Design and Implementation
		  (\htmladdnormallink{NSDI~'07}{http://www.usenix.org/events/nsdi07/})}.",

  url =		 FLUX_PAPERS # "workbench-ftn2006-03-base.html",
  pdf =		 FLUX_PAPERS # "workbench-ftn2006-03.pdf",

  abstract =	 "The network and distributed systems research communities have
		  an increasing need for ``replayable'' research, but our
		  current experimentation resources fall short of reaching this
		  goal.  Replayable activities are those that can be
		  re-executed, either as-is or in modified form, yielding new
		  results that can be compared to previously obtained results.
		  Replayability requires complete records of experiment
		  processes and data, of course, but it also requires
		  facilities that allow those processes to actually be
		  examined, repeated, modified, and reused for new studies.

		  \par We are now evolving Emulab, our popular network testbed
		  management system, to be the basis of a new ``experimentation
		  workbench'' in support of realistic, large-scale, replayable
		  networking research.  We have implemented a new model of
		  testbed-based experiments, based on scientific workflow, that
		  allows people to move forward and backward through their
		  experimentation processes.  Integrated tools in the workbench
		  help researchers manage their activities (both planned and
		  unplanned), software artifacts, data, and analyses.  In this
		  paper we present the workbench, describe its implementation,
		  and report how it has been used by early adopters.  Our
		  initial case studies, using PlanetLab nodes, cluster PCs,
		  802.11 wireless, and software radio, have highlighted both
		  the utility of the current workbench and additional usability
		  challenges that must be addressed."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% This paper was not accepted to HotNets-V (2006).  It was largely recycled
%% into `Eide+:hotos07-submit'.
%%
%% Don't include this in the HTML page for now.
%%
%unpublished{Eide+:hotnets06-submit,
  author =	 "Eric Eide and Leigh Stoller and Jay Lepreau",
  title =	 "Changing the Face of Publishing: An Open Community Archive of
		  Replayable Networking Experiments",
  year =	 2006,
  month =	 aug,
  note =	 "Submitted for publication",

  abstract =	 "The network and distributed systems research communities have
		  an increasing desire for repeatable research, but our current
		  experimentation resources fall short of reaching this goal.
		  Repeatability requires complete records of experiment
		  processes and data, of course, but it also requires
		  facilities that allow those processes to actually be
		  repeated.  The community has current and evolving solutions
		  for each of these needs---data repositories and network
		  testbeds, respectively---but these solutions are separate.

		  \par Testbeds have already changed the playing field for
		  networking research, and data repositories are now doing the
		  same for both controlled and production (Internet) studies.
		  We believe that the next major step will arrive when the
		  community bridges the gap between testbeds and repositories
		  to create \emph{an open, community archive of replayable
		  networking experiments.}  This archive will connect published
		  research to its sources in ways that support new analyses
		  \emph{and} new executions of the systems under study.  In
		  this paper we outline our vision for an ``active library'' of
		  replayable networked systems experimentation, and describe
		  our initial work toward this goal."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% This paper was not accepted to HotOS XI (2007).
%%
%% Don't include this in the HTML page for now.
%%
%unpublished{Eide+:hotos07-submit,
  author =	 "Eric Eide and Leigh Stoller and Jay Lepreau",
  title =	 "An Open Community Archive of Replayable Experiments",
  year =	 2007,
  month =	 jan,
  note =	 "Submitted for publication",

  abstract =	 "A scientific community advances when its experiments are
		  published, scrutinized, repeated, and extended.  As evidenced
		  by several recent papers, systems researchers today are
		  re-awakening to the benefits that are obtainable through
		  repeatable research.  By itself, however, repeatability is
		  not enough, and as computer scientists we can and should do
		  better for ourselves.

		  \par We argue that our community goal should be
		  \emph{replayable research}, which entails not only
		  repeatability but also availability: i.e., community-wide and
		  near-immediate access to software and hardware resources that
		  allow experiments and results to actually be examined,
		  repeated, extended, and reused.  We envision an \emph{open,
		  community archive of replayable experiments} in computer
		  science.  This ``active library'' would connect published
		  research to its sources in ways that support new analyses and
		  new executions of computer-based systems.  Such an archive
		  would directly benefit the systems research community, and
		  its construction will involve a wide array of systems
		  research challenges.

		  \par In this paper we describe our initial work toward the
		  goal of building an active library of replayable experiments,
		  the initial challenges that must be addressed, and the
		  opportunities that lay ahead."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% This is a `misc' (not an `inproceedings') because the workshop papers were
%% not formally published as a proceedings.
%%
@misc{Eide+:icse01-wasc,
  author =	 "Eric Eide and Alastair Reid and Matthew Flatt and Jay
		  Lepreau",
  title =	 "Aspect Weaving as Component Knitting: Separating Concerns
		  with {Knit}",
  howpublished = ICSE01_WASC,
  year =	 2001,
  month =	 may,

  url =		 FLUX_PAPERS # "knit-icse01-wasc/",
  postscript =	 FLUX_PAPERS # "knit-icse01-wasc.ps.gz",
  pdf =		 FLUX_PAPERS # "knit-icse01-wasc.pdf",

  abstract =	 "\emph{Knit} is a new component specification and linking
		  language.  It was initially designed for low-level systems
		  software, which requires especially flexible components with
		  especially well-defined interfaces.  For example, threads and
		  virtual memory are typically implemented by components within
		  the system, instead of being supplied by some execution
		  environment.  Consequently, components used to construct the
		  system must expose interactions with threads and memory.  The
		  component composition tool must then check the resulting
		  system for correctness, and weave the components together to
		  achieve reasonable performance.

		  \par Component composition with Knit thus acts like aspect
		  weaving: component interfaces determine the ``join points''
		  for weaving, while components (some of which may be
		  automatically generated) implement aspects.  Knit is not
		  limited to the construction of low-level software, and to the
		  degree that a set of components exposes fine-grained
		  relationships, Knit provides the benefits of aspect-oriented
		  programming within its component model."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

@inproceedings{Eide+:icse02,
  author =	 "Eric Eide and Alastair Reid and John Regehr and Jay Lepreau",
  title =	 "Static and Dynamic Structure in Design Patterns",
  booktitle =    ICSE02,
  address =      "Orlando, {FL}",
  year =	 2002,
  month =	 may,
  pages =	 "208--218",

  note =	 ACM_COPYRIGHT_2002
		 # "  " #
		 "The {\htmladdnormallink{definitive copy of this
		  work}{http://doi.acm.org/10.1145/581339.581367}}
		  is available from the ACM Digital Library.",

  url =		 FLUX_PAPERS # "knit-icse02/",
  postscript =	 FLUX_PAPERS # "knit-icse02.ps.gz",
  pdf =		 FLUX_PAPERS # "knit-icse02.pdf",

  abstract =	 "Design patterns are a valuable mechanism for emphasizing
		  structure, capturing design expertise, and facilitating
		  restructuring of software systems.  Patterns are typically
		  applied in the context of an object-oriented language and are
		  implemented so that the pattern participants correspond to
		  object instances that are created and connected at run-time.
		  This paper describes a complementary realization of design
		  patterns, in which many pattern participants correspond to
		  statically instantiated and connected components.

		  \par Our approach separates the static parts of the software
		  design from the dynamic parts of the system behavior.  This
		  separation makes the software design more amenable to
		  analysis, thus enabling more effective and domain-specific
		  detection of system design errors, prediction of run-time
		  behavior, and more effective optimization.  This technique is
		  applicable to imperative, functional, and object-oriented
		  languages: we have extended C, Scheme, and Java with our
		  component model.  In this paper, we illustrate our approach
		  in the context of the OSKit, a collection of operating system
		  components written in C\@."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

@incollection{Eide+:lcr98,
  author =	 "Eric Eide and Jay Lepreau and James L. Simister",
  title =	 "Flexible and Optimized {IDL} Compilation for Distributed
		  Applications",
  pages =	 "288--302",
  booktitle =	 LCR98,
  series =	 LNCS,
  volume =	 "1511",
  editor =	 "David O'Hallaron",
  publisher =	 "Springer",
  year =	 1998,
  month =	 may,

  note =	 "{\copyright{} \htmladdnormallink{Springer-Verlag}{http://www.springer.de/}}",
  url =		 FLUX_PAPERS # "flick-lcr98.ps.gz",
  postscript =	 FLUX_PAPERS # "flick-lcr98.ps.gz",
  abstract =	 "The author of a distributed system is often faced with a
		  dilemma when writing the system's communication code.  If the
		  code is written by hand (e.g., using Active Messages) or
		  partly by hand (e.g., using MPI) then the speed of the
		  application may be maximized, but the human effort required
		  to implement and maintain the system is greatly increased.
		  On the other hand, if the code is generated using a
		  high-level tool (e.g., a CORBA IDL compiler) then programmer
		  effort will be reduced, but the performance of the
		  application may be intolerably poor.  The tradeoff between
		  system performance and development effort arises because
		  existing communication middleware is inefficient, imposes
		  excessive presentation layer overhead, and therefore fails to
		  expose much of the underlying network performance to
		  application code.  Moreover, there is often a mismatch
		  between the desired communication style of the application
		  (e.g., asynchronous message passing) and the communication
		  style of the code produced by an IDL compiler (synchronous
		  remote procedure call).  We believe that this need not be the
		  case, but that established optimizing compiler technology can
		  be applied and extended to attack these domain-specific
		  problems.

		  \par We have implemented \emph{Flick}, a flexible and
		  optimizing IDL compiler, and are using it to explore
		  techniques for producing high-performance code for
		  distributed and parallel applications.  Flick produces
		  optimized code for marshaling and unmarshaling data;
		  experiments show that Flick-generated stubs can marshal data
		  between 2 and 17 times as fast as stubs produced by other IDL
		  compilers.  Further, because Flick is implemented as a
		  ``kit'' of components, it is possible to extend the compiler
		  to produce stylized code for many different application
		  interfaces and underlying transport layers.  In this paper we
		  outline a novel approach for producing ``decomposed'' stubs
		  for a distributed global memory service."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% Don't include this in the HTML page for now.
%%
%misc{Eide+:nsdi06-poster,
  author =	 "Eric Eide and Leigh Stoller and Tim Stack and Juliana Freire
		  and Jay Lepreau",
  title =	 "An Experimentation Workbench for Networked Systems",
  howpublished = "Poster at the Third Symposium on Networked Systems Design and
		  Implementation
		  ({\htmladdnormallink{NSDI~'06}{http://www.usenix.org/events/nsdi06/}})",
  year =	 2006,
  month =	 may
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

@inproceedings{Eide+:nsdi07,
  author =	 "Eric Eide and Leigh Stoller and Jay Lepreau",
  title =	 "An Experimentation Workbench for Replayable Networking
		  Research",
  booktitle =	 NSDI07,
  address =	 "Cambridge, {MA}",
  year =	 2007,
  month =	 apr,
  pages =	 "215--228",

  url =		 FLUX_PAPERS # "workbench-nsdi07-base.html",
  pdf =		 FLUX_PAPERS # "workbench-nsdi07.pdf",

  abstract =	 "The networked and distributed systems research communities
		  have an increasing need for ``replayable'' research, but our
		  current experimentation resources fall short of satisfying
		  this need.  Replayable activities are those that can be
		  re-executed, either as-is or in modified form, yielding new
		  results that can be compared to previous ones.  Replayability
		  requires complete records of experiment processes and data,
		  of course, but it also requires facilities that allow those
		  processes to actually be examined, repeated, modified, and
		  reused.

		  \par We are now evolving Emulab, our popular network testbed
		  management system, to be the basis of a new
		  \emph{experimentation workbench} in support of realistic,
		  large-scale, replayable research.  We have implemented a new
		  model of testbed-based experiments that allows people to move
		  forward and backward through their experimentation
		  processes.  Integrated tools help researchers manage their
		  activities (both planned and unplanned), software artifacts,
		  data, and analyses.  We present the workbench, describe its
		  implementation, and report how it has been used by early
		  adopters.  Our initial case studies highlight both the
		  utility of the current workbench and additional usability
		  challenges that must be addressed."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

@inproceedings{Eide+:pldi97,
  author =	 "Eric Eide and Kevin Frei and Bryan Ford and Jay Lepreau and
		  Gary Lindstrom",
  title =	 "Flick: A Flexible, Optimizing {IDL} Compiler",
  pages =	 "44--56",
  booktitle =	 PLDI97,
  address =	 "Las Vegas, {NV}",
  year =	 1997,
  month =	 jun,

  note =	 ACM_COPYRIGHT_1997
		 # "  " #
		 "The {\htmladdnormallink{definitive copy of this
		  work}{http://doi.acm.org/10.1145/258915.258921}}
		  is available from the ACM Digital Library.",

  url =		 FLUX_PAPERS # "flick-pldi97.ps.gz",
  postscript =	 FLUX_PAPERS # "flick-pldi97.ps.gz",
  abstract =	 "An interface definition language (IDL) is a nontraditional
		  language for describing interfaces between software
		  components.  IDL compilers generate ``stubs'' that provide
		  separate communicating processes with the abstraction of
		  local object invocation or procedure call.  High-quality stub
		  generation is essential for applications to benefit from
		  component-based designs, whether the components reside on a
		  single computer or on multiple networked hosts.  Typical IDL
		  compilers, however, do little code optimization, incorrectly
		  assuming that interprocess communication is always the
		  primary bottleneck.  More generally, typical IDL compilers
		  are ``rigid'' and limited to supporting only a single IDL, a
		  fixed mapping onto a target language, and a narrow range of
		  data encodings and transport mechanisms.

		  \par \emph{Flick}, our new IDL compiler, is based on the
		  insight that IDLs are true languages amenable to modern
		  compilation techniques.  Flick exploits concepts from
		  traditional programming language compilers to bring both
		  flexibility and optimization to the domain of IDL
		  compilation.  Through the use of carefully chosen
		  intermediate representations, Flick supports multiple IDLs,
		  diverse data encodings, multiple transport mechanisms, and
		  applies numerous optimizations to all of the code it
		  generates.  Our experiments show that Flick-generated stubs
		  marshal data between 2 and 17~times faster than stubs
		  produced by traditional IDL compilers, and on today's generic
		  operating systems, increase end-to-end throughput by factors
		  between 1.2 and~3.7."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

@mastersthesis{Eide:msthesis,
  author =	 "Eric Norman Eide",
  title =	 "{Valet}: {An} Intelligent {UNIX} Shell Interface",
  school =	 "University of Utah",
  year =	 1995,
  month =	 aug,
  note =	 "Computer Science Technical Report {CSTD}--95--006",

  url =		 "thesis.ps.gz",
  postscript =	 "thesis.ps.gz",
  abstract =	 "Many modern human-computer interfaces are difficult for
		  people to use.  This is often because these interfaces make
		  no significant attempt to communicate with the people who use
		  them.  In other words, these interfaces are uncooperative:
		  They do not adapt themselves to their users' needs and they
		  are insensitive to human foibles.  Ordinary command line
		  interfaces such as that of the UNIX C shell (\texttt{csh})
		  are intolerant of even the most simple input errors, even
		  when those errors have obvious corrections.  An
		  ``intelligent'' UNIX shell interface, on the other hand,
		  would make use of knowledge and interaction context in order
		  to interpret --- and as necessary, correct --- its users'
		  commands.

		  \par Valet is a prototype of such an ``intelligent''
		  interface to the UNIX C shell.  Valet adds knowledge-based
		  parsing and input correction to the shell by encapsulating an
		  ordinary C shell process within a framework that allows Valet
		  to control the shell's input and output.  Valet intercepts
		  shell commands and parses them, using its knowledge of the
		  most popular UNIX shell commands, its built-in model of the
		  file system, and data that describe the commands and files
		  most often and recently referenced by individual users.
		  Valet incorporates heuristics designed to detect and correct
		  the kinds of mistakes that experienced users make most
		  frequently: typographical errors, file location errors, and
		  minor syntactic errors.

		  \par In order to evaluate the interface, eleven volunteers
		  agreed to use Valet in the course of their normal work for
		  approximately four weeks.  The commands that those people
		  entered, along with Valet's responses, were recorded and
		  analyzed in order to measure the overall usefulness and
		  effectiveness of the system.  The data from the experiment
		  suggest that knowledge-based, error-tolerant, ``intelligent''
		  command parsing can have very beneficial effects.  The
		  experiment also pointed to ways in which Valet could be
		  improved."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

@inproceedings{Eide+:rtas04,
  author =	 "Eric Eide and Tim Stack and John Regehr and Jay Lepreau",
  title =	 "Dynamic {CPU} Management for Real-Time, Middleware-Based
		  Systems",
  booktitle =	 RTAS04,
  address =	 "Toronto, {ON}",
  year =	 2004,
  month =	 may,
  pages =	 "286--295",

  note =	 IEEE_COPYRIGHT_2004,

  url =		 FLUX_PAPERS # "cpubroker-rtas04/",
  postscript =	 FLUX_PAPERS # "cpubroker-rtas04.ps.gz",
  pdf =		 FLUX_PAPERS # "cpubroker-rtas04.pdf",

  abstract =	 "Many real-world distributed, real-time, embedded (DRE)
		  systems, such as multi-agent military applications, are built
		  using commercially available operating systems, middleware,
		  and collections of pre-existing software.  The complexity of
		  these systems makes it difficult to ensure that they maintain
		  high quality of service (QoS)\@.  At design time, the
		  challenge is to introduce coordinated QoS controls into
		  multiple software elements in a non-invasive manner.  At run
		  time, the system must adapt dynamically to maintain high QoS
		  in the face of both expected events, such as application mode
		  changes, and unexpected events, such as resource demands from
		  other applications.

		  \par In this paper we describe the design and implementation
		  of a \emph{CPU~Broker} for these types of DRE systems.  The
		  CPU~Broker mediates between multiple real-time tasks and the
		  facilities of a real-time operating system: using feedback
		  and other inputs, it adjusts allocations over time to ensure
		  that high application-level QoS is maintained.  The broker
		  connects to its monitored tasks in a non-invasive manner, is
		  based on and integrated with industry-standard middleware,
		  and implements an open architecture for new CPU management
		  policies.  Moreover, these features allow the broker to be
		  easily combined with other QoS mechanisms and policies, as
		  part of an overall end-to-end QoS management system.  We
		  describe our experience in applying the CPU~Broker to a
		  simulated DRE military system.  Our results show that the
		  broker connects to the system transparently and allows it to
		  function in the face of run-time CPU resource contention."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

@article{Eide+:sciprog99,
  author =	 "Eric Eide and James L. Simister and Tim Stack and Jay
		  Lepreau",
  title =	 "Flexible {IDL} Compilation for Complex Communication
		  Patterns",
  journal =	 SCIPROG,
  year =	 1999,
  volume =	 7,
  number =	 "3,~4",
  pages =	 "275--287",

  abstract =	 "Distributed applications are complex by nature, so it is
		  essential that there be effective software development tools
		  to aid in the construction of these programs.  Commonplace
		  ``middleware'' tools, however, often impose a tradeoff
		  between programmer productivity and application performance.
		  For instance, many CORBA IDL compilers generate code that is
		  too slow for high-performance systems.  More importantly,
		  these compilers provide inadequate support for sophisticated
		  patterns of communication.  We believe that these problems
		  can be overcome, thus making IDL compilers and similar
		  middleware tools useful for a broader range of systems.

		  \par To this end we have implemented \emph{Flick}, a flexible
		  and optimizing IDL compiler, and are using it to produce
		  specialized high-performance code for complex distributed
		  applications.  Flick can produce specially ``decomposed''
		  stubs that encapsulate different aspects of communication in
		  separate functions, thus providing application programmers
		  with fine-grain control over all messages.  The design of our
		  decomposed stubs was inspired by the requirements of a
		  particular distributed application called Khazana, and in
		  this paper we describe our experience to date in refitting
		  Khazana with Flick-generated stubs.  We believe that the
		  special IDL compilation techniques developed for Khazana will
		  be useful in other applications with similar communication
		  requirements."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

@inproceedings{Eide+:usenix06,
  author =	 "Eric Eide and Leigh Stoller and Tim Stack and Juliana Freire
		  and Jay Lepreau",
  title =	 "Integrated Scientific Workflow Management for the {Emulab}
		  Network Testbed",
  booktitle =	 USENIX06,
  address =	 "Boston, {MA}",
  year =	 2006,
  month =	 may # "--" # jun,
  pages =	 "363--368",
  note =	 "Short paper",

  url =		 FLUX_PAPERS # "workflow-usenix06-base.html",
  postscript =	 FLUX_PAPERS # "workflow-usenix06.ps.gz",
  pdf =		 FLUX_PAPERS # "workflow-usenix06.pdf",

  abstract =	 "The main forces that shaped current network testbeds were the
		  needs for realism and scale.  Now that several testbeds
		  support large and complex experiments, management of
		  experimentation processes and results has become more
		  difficult and a barrier to high-quality systems research.
		  The popularity of network testbeds means that new tools for
		  managing experiment workflows, addressing the ready-made base
		  of testbed users, can have important and significant impacts.

		  \par We are now evolving Emulab, our large and popular
		  network testbed, to support experiments that are organized
		  around scientific workflows.  This paper summarizes the
		  opportunities in this area, the new approaches we are taking,
		  our implementation in progress, and the challenges in
		  adapting scientific workflow concepts for testbed-based
		  research.  With our system, we expect to demonstrate that a
		  network testbed with integrated scientific workflow
		  management can be an important tool to aid research in
		  networking and distributed systems."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% Don't include this in the HTML page for now.
%%
%misc{Eide+:usenix06-poster,
  author =	 "Eric Eide and Leigh Stoller and Tim Stack and Juliana Freire
		  and Jay Lepreau",
  title =	 "Integrated Scientific Workflow Management for the {Emulab}
		  Network Testbed",
  howpublished = "Poster at the 2006 USENIX Annual Technical Conference
		  ({\htmladdnormallink{USENIX~'06}{http://www.usenix.org/events/usenix06/}})",
  year =	 2006,
  month =	 may # "--" # jun,

  url =		 FLUX_PAPERS # "workflow-usenix06-base.html"
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% XXX --- This document is obsolete.  Refer to `Eide+:icse02' instead.
%%
@techreport{Eide+:uucs-01-014,
  author =	 "Eric Eide and Alastair Reid and John Regehr and Jay Lepreau",
  title =	 "Static and Dynamic Structure in Design Patterns",
  institution =	 "University of Utah",
  number =	 "{UUCS}--01--014",
  year =	 2001,
  month =	 nov,
  note =	 "A revised version of this report was published in
		  \emph{Proceedings of the 24th International Conference on
		  Software Engineering
		  (\htmladdnormallink{ICSE~2002}{http://www.icse-conferences.org/2002/})}.",

  url =		 FLUX_PAPERS # "knit-tr01014/",
  postscript =	 FLUX_PAPERS # "knit-tr01014.ps.gz",
  pdf =		 FLUX_PAPERS # "knit-tr01014.pdf",

  abstract =	 "Design patterns are a valuable mechanism for emphasizing
		  structure, capturing design expertise, and facilitating
		  restructuring of software systems.  Patterns are typically
		  applied in the context of an object-oriented language and are
		  implemented so that the pattern participants correspond to
		  object instances that are created and connected at run-time.
		  This paper describes a complementary realization of design
		  patterns, in which the pattern participants are statically
		  instantiated and connected components.

		  \par Our approach separates the static parts of the software
		  design from the dynamic parts of the system behavior.  This
		  separation makes the software design more amenable to
		  analysis, enabling more effective and domain specific
		  detection of system design errors, prediction of run-time
		  behavior, and more effective optimization.  This technique is
		  applicable to imperative, functional, and object-oriented
		  languages: we have extended C, Scheme, and Java with our
		  component model.  In this paper, we illustrate this approach
		  in the context of the OSKit, a collection of operating system
		  components written in C\@."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% XXX --- This document is obsolete.  Refer to `Eide+:rtas04' instead.
%%
@techreport{Eide+:uucs-04-004,
  author =	 "Eric Eide and Tim Stack and John Regehr and Jay Lepreau",
  title =	 "Dynamic {CPU} Management for Real-Time, Middleware-Based
		  Systems",
  institution =	 "University of Utah",
  number =	 "{UUCS}--04--004",
  year =	 2004,
  month =	 jan,
  note =	 "A revised version of this report was published in
		  \emph{Proceedings of the Tenth IEEE Real-Time and Embedded
		  Technology and Applications Symposium
		  (\htmladdnormallink{RTAS~2004}{http://www.cs.virginia.edu/rtas04/})}.",

  url =		 FLUX_PAPERS # "cpubroker-tr04004/",
  postscript =	 FLUX_PAPERS # "cpubroker-tr04004.ps.gz",
  pdf =		 FLUX_PAPERS # "cpubroker-tr04004.pdf",

  abstract =	 "Many real-world distributed, real-time, embedded (DRE)
		  systems, such as multi-agent military applications, are built
		  using commercially available operating systems, middleware,
		  and collections of pre-existing software.  The complexity of
		  these systems makes it difficult to ensure that they maintain
		  high quality of service (QoS)\@.  At design time, the
		  challenge is to introduce coordinated QoS controls into
		  multiple software elements in a non-invasive manner.  At run
		  time, the system must adapt dynamically to maintain high QoS
		  in the face of both expected events, such as application mode
		  changes, and unexpected events, such as resource demands from
		  other applications.

		  \par In this paper we describe the design and implementation
		  of a \emph{CPU~Broker} for these types of DRE systems.  The
		  CPU~Broker mediates between multiple real-time tasks and the
		  facilities of a real-time operating system: using feedback
		  and other inputs, it adjusts allocations over time to ensure
		  that high application-level QoS is maintained.  The broker
		  connects to its monitored tasks in a non-invasive manner, is
		  based on and integrated with industry-standard middleware,
		  and implements an open architecture for new CPU management
		  policies.  Moreover, these features allow the broker to be
		  easily combined with other QoS mechanisms and policies, as
		  part of an overall end-to-end QoS management system.  We
		  describe our experience in applying the CPU~Broker to a
		  simulated DRE military system.  Our results show that the
		  broker connects to the system transparently and allows it to
		  function in the face of run-time CPU resource contention."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% XXX --- need to put this online.
%%
@inproceedings{EideRegehr:emsoft08,
  author =	 "Eric Eide and John Regehr",
  title =	 "Volatiles Are Miscompiled, and What to Do about It",
  booktitle =	 EMSOFT08,
  address =	 "Atlanta, GA",
  year =	 2008,
  month =	 oct,
  pages =	 "255--264",

  note =	 ACM_COPYRIGHT_2008
		 # "  " #
		 "The {\htmladdnormallink{definitive copy of this
		  work}{http://doi.acm.org/10.1145/1450058.1450093}}
		  is available from the ACM Digital Library.",

  url =		 "http://www.cs.utah.edu/\~{}regehr/papers/emsoft08-preprint.pdf",
  xpostscript =	 "",
  pdf =		 "http://www.cs.utah.edu/\~{}regehr/papers/emsoft08-preprint.pdf",

  abstract =	 "C's volatile qualifier is intended to provide a reliable link
		  between operations at the source-code level and operations at
		  the memory-system level.  We tested thirteen
		  production-quality C compilers and, for each, found
		  situations in which the compiler generated incorrect code for
		  accessing volatile variables.  This result is disturbing
		  because it implies that embedded software and operating
		  systems---both typically coded in C, both being bases for
		  many mission-critical and safety-critical applications, and
		  both relying on the correct translation of volatiles---may be
		  being miscompiled.

		  \par Our contribution is centered on a novel technique for
		  finding volatile bugs and a novel technique for working
		  around them.  First, we present \emph{access summary
		  testing}: an efficient, practical, and automatic way to
		  detect code-generation errors related to the volatile
		  qualifier.  We have found a number of compiler bugs by
		  performing access summary testing on randomly generated C
		  programs.  Some of these bugs have been confirmed and fixed
		  by compiler developers.  Second, we present and evaluate a
		  workaround for the compiler defects we discovered.  In 96\%
		  of the cases in which one of our randomly generated programs
		  is miscompiled, we can cause the faulty C compiler to produce
		  correctly behaving code by applying a straightforward
		  source-level transformation to the test program."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% Jay Lepreau and I edited the summaries, but `article' doesn't provide any
%% way to denote us as editors.
%%
@article{LepreauEide:osr00,
  author =	 "Jay Lepreau and Eric Eide",
  title =	 "Session Summaries from the 17th {Symposium on Operating
		  Systems Principles} {(SOSP~'99)}",
  journal =	 OSR,
  year =	 2000,
  month =	 apr,
  volume =	 34,
  number =	 2,
  pages =	 "4--41",

  url =		 "http://www.acm.org/sigops/sosp99/sosp99-summary/",
  postscript =	 "http://www.acm.org/sigops/sosp99/sosp99-summary.ps.gz",
  pdf =		 "http://www.acm.org/sigops/sosp99/sosp99-summary.pdf"
}
%% This article has no abstract.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% No page numbers, because the proceedings were published electronically in
%% the ACM Digital Library.
%%
%% XXX --- need to put this online.
%%
@inproceedings{Regehr+:asplos06-plos,
  author =	 "John Regehr and Nathan Cooprider and Will Archer and Eric
		  Eide",
  title =	 "Efficient Type and Memory Safety for Tiny Embedded Systems",
  booktitle =	 ASPLOS06_PLOS,
  address =	 "San~Jose, {CA}",
  year =	 2006,
  month =	 oct,

  note =	 ACM_COPYRIGHT_2006
		 # "  " #
		 "The {\htmladdnormallink{definitive copy of this
		  work}{http://doi.acm.org/10.1145/1215995.1216001}}
		  is available from the ACM Digital Library.",

  xurl =	 "",
  xpostscript =	 "",
  xpdf =	 "",

  abstract =	 "We report our experience in implementing type and memory
		  safety in an efficient manner for sensor network nodes
		  running TinyOS: tiny embedded systems running legacy, C-like
		  code.  A compiler for a safe language must often insert
		  dynamic checks into the programs it produces; these generally
		  make programs both larger and slower.  In this paper, we
		  describe our novel compiler toolchain, which uses a family of
		  techniques to minimize or avoid these run-time costs.  Our
		  results show that safety can in fact be implemented cheaply
		  on low-end 8-bit microcontrollers."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% This paper was not accepted to ICSE 2007.
%%
%% Don't include this in the HTML page for now.
%%
%unpublished{Regehr+:icse07-submit,
  author =	 "John Regehr and Nathan Cooprider and Will Archer and Eric
		  Eide",
  title =	 "Dependable Sensor Network Applications Through Language
		  Safety",
  year =	 2006,
  month =	 sep,
  note =	 "Submitted for publication",

  abstract =	 "Engineering dependable sensor network software is difficult:
		  applications are concurrent and distributed, hardware-based
		  memory protection is unavailable, and severe resource
		  constraints have necessitated the use of unsafe, low-level
		  languages.  Our contribution is to enable memory and type
		  safety for legacy sensor network applications using a
		  collection of source-to-source program transformation tools.
		  We show that safe execution is \emph{practical} in terms of
		  resource utilization.  We show that safe execution is
		  \emph{useful} by presenting two case studies.  In the first,
		  we describe how our toolchain rapidly located a vexing bug
		  that had set a research group back by several months.  We
		  also show that our tools can greatly increase the
		  availability of the application even if the bug is not fixed.
		  Our second case study uses safe execution to create an
		  execution environment that isolates potentially buggy
		  application code from other software running on a sensor
		  network node."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

@techreport{Regehr+:uucs-06-007,
  author =	 "John Regehr and Nathan Cooprider and Will Archer and Eric
		  Eide",
  title =	 "Memory Safety and Untrusted Extensions for {TinyOS}",
  institution =	 "University of Utah",
  number =	 "{UUCS}--06--007",
  year =	 2006,
  month =	 jun,

  postscript =	 UUCS_TECHREPORTS # "2006/ps/UUCS-06-007.ps",
  pdf =		 UUCS_TECHREPORTS # "2006/pdf/UUCS-06-007.pdf",

  abstract =	 "Sensor network applications should be reliable.  However,
		  TinyOS, the dominant sensor net OS, lacks basic building
		  blocks for reliable software systems: memory protection,
		  isolation, and safe termination.  These features are
		  typically found in general-purpose operating systems but are
		  believed to be too expensive for tiny embedded systems with a
		  few kilobytes of RAM\@.  We dispel this notion and show that
		  CCured, a safe dialect of C, can be leveraged to provide
		  memory safety for largely unmodified TinyOS applications.  We
		  build upon safety to implement two very different
		  environments for TinyOS applications.  The first, Safe
		  TinyOS, provides a minimal kernel for safely executing
		  trusted applications.  Safe execution traps and identifies
		  bugs that would otherwise have silently corrupted RAM\@.  The
		  second environment, UTOS, implements a user-kernel boundary
		  that supports isolation and safe termination of untrusted
		  code.  Existing TinyOS components can often be ported to UTOS
		  with little effort.  To create our environments, we
		  substantially augmented the CCured toolchain to emit code
		  that is safe under interrupt-driven concurrency, to reduce
		  storage requirements by compressing error messages, to
		  refactor direct hardware access into calls to trusted helper
		  functions, and to make safe programs more efficient using
		  whole-program optimization.  A surprising result of our work
		  is that a safe, optimized TinyOS program can be faster than
		  the original unsafe, unoptimized application."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

@inproceedings{Reid+:osdi00,
  author =	 "Alastair Reid and Matthew Flatt and Leigh Stoller and Jay
		  Lepreau and Eric Eide",
  title =	 "{Knit}: Component Composition for Systems Software",
  booktitle =	 OSDI00,
  address =	 "San~Diego, {CA}",
  year =	 "2000",
  month =	 oct,
  pages =	 "347--360",

  url =		 FLUX_PAPERS # "knit-osdi00/",
  postscript =	 FLUX_PAPERS # "knit-osdi00.ps.gz",
  pdf =		 FLUX_PAPERS # "knit-osdi00.pdf",

  abstract =	 "\emph{Knit} is a new component definition and linking
		  language for systems code.  Knit helps make C code more
		  understandable and reusable by third parties, helps eliminate
		  much of the performance overhead of componentization, detects
		  subtle errors in component composition that cannot be caught
		  with normal component type systems, and provides a foundation
		  for developing future analyses over C-based components, such
		  as cross-component optimization.  The language is especially
		  designed for use with component kits, where standard linking
		  tools provide inadequate support for component configuration.
		  In particular, we developed Knit for use with the OSKit, a
		  large collection of components for building low-level
		  systems.  However, Knit is not OSKit-specific, and we have
		  implemented parts of the Click modular router in terms of
		  Knit components to illustrate the expressiveness and
		  flexibility of our language.  This paper provides an overview
		  of the Knit language and its applications."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

@inproceedings{Stack+:openarch03,
  author =	 "Tim Stack and Eric Eide and Jay Lepreau",
  title =	 "{Bees}: A Secure, Resource-Controlled, {Java}-Based
		  Execution Environment",
  booktitle =	 OPENARCH03,
  address =	 "San~Francisco, {CA}",
  year =	 2003,
  month =	 apr,
  pages =	 "97--106",

  note =	 IEEE_COPYRIGHT_2003,

  url =		 FLUX_PAPERS # "bees-openarch03/",
  postscript =	 FLUX_PAPERS # "bees-openarch03.ps.gz",
  pdf =		 FLUX_PAPERS # "bees-openarch03.pdf",

  abstract =	 "Mobile code makes it possible for users to define the
		  processing and protocols used to communicate with a remote
		  node, while still allowing the remote administrator to set
		  the terms of interaction with that node.  However, mobile
		  code cannot do anything useful without a rich execution
		  environment, and no administrator would install a rich
		  environment that did not also provide strict controls over
		  the resources consumed and accessed by the mobile code.

		  \par Based on our experience with ANTS, we have developed
		  Bees, an execution environment that provides better security,
		  fine-grained control over capsule propagation, simple
		  composition of active protocols, and a more flexible
		  mechanism for interacting with end-user programs.  Bees'
		  security comes from a flexible authentication and
		  authorization mechanism, capability-based access to
		  privileged resources, and integration with our custom virtual
		  machine that provides isolation, termination, and resource
		  control.  The enhancements to the mobile code environment
		  make it possible to compose a protocol with a number of
		  ``helper'' protocols.  In addition, mobile code can now
		  interact naturally with end-user programs, making it possible
		  to communicate with legacy applications.  We believe that
		  these features offer significant improvements over the ANTS
		  execution environment and create a more viable platform for
		  active applications."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% This is a `misc' (not an `inproceedings') because the workshop papers were
%% not formally published as a proceedings.
%%
%% XXX --- need to put this online.
%%
@misc{WaltonEide:oopsla05-ea,
  author =	 "Sean Walton and Eric Eide",
  title =	 "Feature Typing: An Early Aspects Technique",
  howpublished = OOPSLA05_EA,
  year =	 2005,
  month =	 oct,

  xurl =	 "",
  xpostscript =	 "",
  xpdf =	 "",

  abstract =	 "An implementation and deployment plan is critically important
		  in the development of a software product or product line.  A
		  good plan results from an informed feature analysis that
		  incorporates crosscutting concerns such as variability
		  management and the project time-line.  A poor feature
		  analysis, on the other hand, can result in an ineffective
		  project schedule and an implementation that hinders the
		  delivery of new features.  An early understanding of product
		  features can help a project planner create an effective plan,
		  and help a designer avoid unsupportable code.

		  \par Feature typing is our emerging model that describes what
		  features are in terms of two separate natures.  The vertical
		  nature of a feature generally follows a UML's use-case path,
		  describing what the feature does.  The horizontal nature
		  expresses a program characteristic, describing what the
		  feature has.  Because each nature affects feature interaction
		  and product integration and testing, early identification and
		  typing can increase predictability of project time-lines and
		  reduce code complexity.

		  \par This paper details the feature typing model and its
		  application for two separate case studies.  The studies
		  demonstrate the ways that feature typing can help with the
		  design, planning, coding, and testing of feature
		  implementations.  The studies also illuminate the limitations
		  of the approach."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% XXX --- need to put this online.
%%
@inproceedings{WaltonEide:plos07,
  author =	 "Sean Walton and Eric Eide",
  title =	 "Resource Management Aspects for Sensor Network Software",
  booktitle =	 PLOS07,
  address =	 "Stevenson, {WA}",
  year =	 2007,
  month =	 oct,

  abstract =	 "The software that runs on a typical wireless sensor network
		  node must address a variety of constraints that are imposed
		  by its purpose and implementation platform.  Examples of such
		  constraints include real-time behavior, highly limited RAM
		  and ROM, and other scarce resources.  These constraints lead
		  to crosscutting concerns for the implementations of sensor
		  network software: that is, all parts of the software must be
		  carefully written to respect its resource constraints.
		  Neither traditional languages (such as~C) nor component-based
		  languages (such as nesC) for implementing sensor network
		  software allow programmers to deal with crosscutting resource
		  constraints in a modular fashion.

		  \par In this paper we describe \emph{Aspect~nesC~(ANesC)}, a
		  language we are now implementing to help programmers
		  modularize the implementations of crosscutting concerns
		  within sensor network software.  Aspect~nesC extends nesC, a
		  component-based dialect of~C, with constructs for
		  aspect-oriented programming.  In addition to combining the
		  ideas of components and aspects in a single language, ANesC
		  will provide specific and novel constructs for
		  resource-management concerns.  For instance, pointcuts can
		  identify program points at which the run-time stack is about
		  to be exhausted or a real-time deadline has been missed.
		  Corrective actions can be associated with these points via
		  ``advice.''  A primary task of the Aspect nesC compiler is to
		  implement such resource-focused aspects in an efficient
		  manner."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% This paper was not accepted to ICSE 2006.
%%
%% Don't include this in the HTML page for now.
%%
%unpublished{Xin+:icse06-submit,
  author =	 "Bin Xin and Eric Eide and Wilson C. Hsieh and Sean McDirmid",
  title =	 "A Comparison of {Jiazzi} and {AspectJ} for Feature-Oriented
		  Software Product Line Development",
  year =	 2005,
  month =	 sep,
  note =	 "Submitted for publication",

  abstract =	 "Feature-oriented programming is important for the
		  construction of configurable software systems and product
		  lines.  Although there has been much research on the
		  usefulness of particular tools for feature-oriented
		  development, there are few comparisons of the relative
		  effectiveness of different tools.  In this paper, we compare
		  AspectJ and Jiazzi, two systems that can modularize and
		  compose the implementations of features within Java programs.
		  AspectJ is an aspect-oriented extension to Java, whereas
		  Jiazzi is a component system for Java.  To compare these
		  systems, we re-engineered an AspectJ implementation of a
		  configurable event service.  We derived a new feature model
		  for the product line and reimplemented it using Jiazzi.  Our
		  experience is that Jiazzi provides better support for
		  structuring the implementation, manipulating features,
		  configuring complete systems, and maintaining traceability
		  between the model and its implementation.  AspectJ provides
		  better support for non-invasive extensions, polymorphic
		  features, and some kinds of unanticipated evolution.  Guided
		  by our experience, we recommend ways in which both languages
		  could evolve to better support the implementation of software
		  product lines."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

@techreport{Xin+:uucs-04-001,
  author =	 "Bin Xin and Sean McDirmid and Eric Eide and Wilson C. Hsieh",
  title =	 "A Comparison of {Jiazzi} and {AspectJ} for Feature-Wise
		  Decomposition",
  institution =	 "University of Utah",
  number =	 "{UUCS}--04--001",
  year =	 2004,
  month =	 mar,

  url =		 FLUX_PAPERS # "ec-jf-tr04001-base.html",
  postscript =	 FLUX_PAPERS # "ec-jf-tr04001.ps.gz",
  pdf =		 FLUX_PAPERS # "ec-jf-tr04001.pdf",

  abstract =	 "Feature-wise decomposition is an important approach to
		  building configurable software systems.  Although there has
		  been research on the usefulness of particular tools for
		  feature-wise decomposition, there are not many informative
		  comparisons on the relative effectiveness of different tools.
		  In this paper, we compare AspectJ and Jiazzi, which are two
		  different systems for decomposing Java programs.  AspectJ is
		  an aspect-oriented extension to Java, whereas Jiazzi is a
		  component system for Java.  To compare these systems, we
		  reimplemented an AspectJ implementation of a highly
		  configurable CORBA Event Service using Jiazzi.  Our
		  experience is that Jiazzi provides better support for
		  structuring the system and manipulating features, while
		  AspectJ is more suitable for manipulating existing Java code
		  in non-invasive and unanticipated ways."
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

@inproceedings{Zachary+:sigcse95,
  author =	 "Joseph L. Zachary and Christopher R. Johnson and Eric N. Eide
		  and Kenneth W. Parker",
  title =	 "An Entry-Level Course in Computational Engineering and
		  Science",
  pages =	 "209--213",
  booktitle =	 SIGCSE95,
  address =	 "Nashville, {TN}",
  year =	 1995,
  month =	 mar,

  note =	 ACM_COPYRIGHT_1995
		 # "  " #
		 "The {\htmladdnormallink{definitive copy of this
		  work}{http://doi.acm.org/10.1145/199688.199786}}
		  is available from the ACM Digital Library.",

  url =		 "http://www.cs.utah.edu/\~{}zachary/sigcse95.ps",
  postscript =	 "http://www.cs.utah.edu/\~{}zachary/sigcse95.ps"
}
%% This paper has no abstract.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% End of file.
