%% -*- mode: BibTeX -*- %% %% Eric Eide %% $Id: index.bib,v 1.61 2008/08/12 21:30:28 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': . %% %% %% 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 %% . 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, .'' %% %% 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 and IEEE 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 --- missing pages and URL; not yet published. %% @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, note = "To appear. " # ACM_COPYRIGHT_2008 # " " # "The definitive copy of this work will be available from the ACM Digital Library.", xnote = ACM_COPYRIGHT_2008 # " " # "The {\htmladdnormallink{definitive copy of this work}{http://doi.acm.org/10.1145/NNNNNNN.NNNNNNN}} 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.