<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="en">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">Towards eCos Autoconfiguration by Static Application Analysis</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Horst</forename><surname>Schirmeier</surname></persName>
							<email>horst.schirmeier@tu-dortmund.de</email>
							<affiliation key="aff0">
								<orgName type="department">Computer Science 12 -Embedded System Software Technische</orgName>
								<orgName type="institution">Universität Dortmund</orgName>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Matthias</forename><surname>Bahne</surname></persName>
							<email>matthias.bahne@tu-dortmund.de</email>
							<affiliation key="aff0">
								<orgName type="department">Computer Science 12 -Embedded System Software Technische</orgName>
								<orgName type="institution">Universität Dortmund</orgName>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Jochen</forename><surname>Streicher</surname></persName>
							<email>jochen.streicher@tu-dortmund.de</email>
							<affiliation key="aff0">
								<orgName type="department">Computer Science 12 -Embedded System Software Technische</orgName>
								<orgName type="institution">Universität Dortmund</orgName>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Olaf</forename><surname>Spinczyk</surname></persName>
							<email>olaf.spinczyk@tu-dortmund.de</email>
							<affiliation key="aff0">
								<orgName type="department">Computer Science 12 -Embedded System Software Technische</orgName>
								<orgName type="institution">Universität Dortmund</orgName>
							</affiliation>
						</author>
						<title level="a" type="main">Towards eCos Autoconfiguration by Static Application Analysis</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">3ACB3C5DAF83CAB77B4879EE3FAC5100</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-23T19:38+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<textClass>
				<keywords>
					<term>eCos</term>
					<term>Automatic Configuration</term>
					<term>Static Analysis</term>
					<term>Model Checking</term>
					<term>CTL</term>
					<term>Software Product Lines</term>
				</keywords>
			</textClass>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>System software product lines such as the embedded real-time operating system eCos are a state-of-the-art solution for application scenarios with a very low hardware resource profile. Being highly configurable at compile time, eCos can be tailored to the application in terms of inclusion or exclusion of fine-grained operating system features.</p><p>The mandatory manual feature selection is carried out by the developer who knows the functionality essential for the application. This process requires profound knowledge of the feature semantics, is very time-consuming, and, in particular, error-prone -most probably resulting in a resource suboptimal or even dysfunctional operating system variant.</p><p>The contribution of this article is an approach to automate the eCos configuration process to a major degree, therefore reducing the outlined disadvantages significantly. A thorough examination of configurable eCos features exhibits four feature categories of varying complexity: By applying standard model checking techniques and static analysis of the application source code, we show that for at least two feature categories the configuration decisions can be taken automatically. Complementing the approach with configlets -highly eCos specific analysis code -a third category is shown to be also coverable.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>I. INTRODUCTION</head><p>There exist various reasons for specializing software systems for a specific application scenario or a particular customer. In the embedded systems domain, the primary motivation is to minimize resource consumption: Resources such as energy, memory or CPU cycles are scarce, and keeping the software stack's resource profile low directly impacts the system's hardware costs and therefore its competitiveness on the market. Tailorable system software has been a focus of our research group for several years, in particular embedded operating systems (OS) <ref type="bibr" target="#b13">[14]</ref>, <ref type="bibr" target="#b14">[15]</ref>, <ref type="bibr" target="#b17">[18]</ref>, embedded application product lines <ref type="bibr" target="#b15">[16]</ref>, and embedded databases <ref type="bibr" target="#b22">[23]</ref>, <ref type="bibr" target="#b23">[24]</ref>.</p><p>This article describes a case study conducted with the opensource, real-time embedded OS eCos 1 , a highly configurable software platform, which can be tailored for the specific needs of the application. eCos is very widespread, because of it being freely available and its comfortable configuration process: Guided by a GUI configuration tool, the application developer decides from a so-called feature model <ref type="bibr" target="#b5">[6]</ref>, <ref type="bibr" target="#b8">[9]</ref> which OS functionality the application mandatorily needs and therefore must be included in the eCos variant deployed on the device. 1 Embedded Configurable Operating System, http://ecos.sourceware.org/ Afterwards, an automated product generation process results in an OS library the application can be linked against. This state-of-the-art procedure has proven to be very effective in practice, but also entails a non-negligible problem: In the case of eCos, the sheer number of more than 1.500 configurable features<ref type="foot" target="#foot_0">2</ref> makes the configuration process extremely complex and time-consuming.</p><p>Our contribution to the automated configuration and tailoring community is an approach to at least partially automate the process by applying standard static analysis and model checking techniques to application source code. We conducted a detailed examination of parts of the eCos 3.0 OS documentation and API in order to determine which conditions hold within an application model if it needs or does not need certain OS features. These conditions, still formulated in plain English, pose a set of requirements for static analysis and model checking. First experiments with our analysis tool prototype seem promising, but also raise new research questions.</p><p>The remainder of this paper is structured as follows: Section II gives a more detailed overview of the motivating context and our approach. Section III describes our manual examination of eCos features and examples for the resulting feature categories. Section IV outlines the steps necessary for automatic feature need derivation: application analysis, model checking, and result interpretation. Section V revisits the results from the manual feature examination, and summarizes the current state of our analysis tool prototype and preliminary results with eCos test programs. We conclude with a discussion of related work, a summary and an outlook on future work in sections VI and VII.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>II. MOTIVATION AND APPROACH</head><p>A. eCos is an Infrastructure Software Product Line Infrastructure software, unlike application software, is in a unidirectional usage relationship with other software layers, and typically depicted in a hierarchy level above the infrastructure. Database software, middleware or standard C libraries, or operating systems such as eCos are typical representatives.</p><p>The categorization of eCos as a software product line (SPL) is a bit more debatable: The SPL community defines these not only by technical aspects like configurability and code Figure <ref type="figure">1</ref>: eCos: Architectural overview <ref type="bibr" target="#b16">[17]</ref>. The unidirectional API usage relationship application-OS can be exploited for the detection of feature need. reuse among product line variants, but also by the engineering process that accompanies the development <ref type="bibr" target="#b4">[5]</ref>. Nevertheless, we believe we can safely consider eCos a SPL, because it has all properties relevant to this study:</p><p>• Variability Management: Similar to the Linux kernel <ref type="bibr" target="#b24">[25]</ref>, eCos supports about a dozen different embedded hardware architectures (with countless subarchitectures), but clearly separates the platform specific variation points from platform independent ones. The configuration tree, separating problem space (configurable features relevant for the application developer) and solution space (the actual implementation behind these features), is organized hierarchically in subsystems (Kernel, Hardware Abstraction Layer, Standard Libraries, I/O, and other optional subsystems) and several levels of nested components (e.g., Serial Device Drivers, ISO C Library String Functions), cf. Figure <ref type="figure" target="#fig_0">2</ref>. On the configuration tree's leaves exist three different types of configuration options: binary options (on/off), one-from-many selections (e.g., allowing the selection of one from three different scheduling algorithms), and value options (e.g., a maximum number of concurrent threads, an integer number within an interval). Additionally, constraints restrict the configuration space to prevent impossible configurations. <ref type="bibr" target="#b27">[28]</ref> • Product Configuration: eCos comes with a comfortable GUI configuration tool that allows creating a specific configuration by assembling components and configuring the contained options (cf. Figure <ref type="figure" target="#fig_0">2</ref>). Feature constraints like dependencies or mutually excluding features are automatically enforced. • Product Generation: The GUI tool is also capable of automatically generating the actual eCos variant from the configuration (cf. Figure <ref type="figure" target="#fig_1">3</ref>). This process generates a new source code tree: The chosen values for the configuration  options are written as C preprocessor macro definitions in generated header files, which in turn have effects on the OS C/C ++ code that is finally compiled and linked to the application. In this so-called feature-driven product line derivation process <ref type="bibr" target="#b26">[27]</ref>, the application developer has to make all configuration decisions manually in order to tailor the underlying infrastructure product line for his application's needs. With highly configurable, real-world product lines such as eCos, the configuration effort -although guided by a GUI tool with automatic inter-feature dependency resolution and textual descriptions of all configuration options -easily exceeds acceptable limits. Moreover, a vast configuration space promotes chances for human mistakes, leading to a resource suboptimal (if too much functionality was configured) or insufficient (essential functionality missing) infrastructure variant. Even worse, this process needs to be iterated once the application evolves. Consequently, (at least partial) automation of the process and tool support is desirable.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>B. API Usage Patterns and Model Checking</head><p>In earlier work <ref type="bibr" target="#b23">[24]</ref> we showed that infrastructure API usage patterns within an application allow to deduce feature need or non-need. Ranging from the simple existence of certain API calls to complex API call patterns and involvement of actual parameter values, different levels of complexity have been observed for real-world infrastructure features. In this case study, we take a closer look at the eCos API and its characteristics related to application analysis and feature relevant API usage patterns. Motivated by our earlier results, we evaluate the temporal logic CTL (computation tree logic <ref type="bibr" target="#b3">[4]</ref>) as a language for formulating feature conditions to be checked within an application model.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>III. EXAMINING THE ECOS OPERATING SYSTEM</head><p>For our approach, the first step towards automatic configuration comprises establishing a relationship between infrastructure features on the one hand, and properties of the application on the other hand. We conducted a thorough manual examination of the configurable features in the eCos kernel components "Kernel schedulers", "Thread-related options" and "Synchronization primitives" in order to gain experience with real-world OS features and to study the implications for application analysis.</p><p>This manual infrastructure feature examination must not be confused with the automated analysis steps described later in this article:</p><p>• This examination must be carried out only once, whereas its results can be reused in all infrastructure deployments. • Therefore, an infrastructure expert (e.g., a member of its development team, outfitted with in-depth knowledge of the API semantics) can (and should) be the person conducting this analysis. • In contrast, the automated analysis steps take place later at the application developer's site.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>A. Manual examination</head><p>The aim of the manual examination of the eCos 3.0 source code and documentation was to ascertain what exact effect each configurable feature has on actual OS functionality, and especially the OS API. We show that an application, containing calls to this API, fulfills certain conditions that indicate its need for OS features. The results, including these feature conditions, were diverse and are presented in the following in terms of four feature categories, each accompanied by examples.</p><p>1) Simple API call usage: One very common case of API usage observed is the simple existence of certain API calls. For example, enabling "Message box blocking put support" (located in the "Synchronization primitives" component) defines a preprocessor macro, which in turn adds the functions cyg_mbox_put(...) and cyg_mbox_timed_put(...) to the kernel API. Knowing this direct relationship from feature selection to the API, and being able to assure these API calls are not additionally related to other features, one can pose a simple, definitive condition on the application code: Iff there exist (reachable) calls to cyg_mbox_put(...) or cyg_mbox_timed_put(...), then the feature "Message box blocking put support" is needed.</p><p>2) API call patterns and actual parameters: Another pattern can be illustrated by the example of the feature "Support optional name for each thread", located in the "Thread-related options" component. This option enables applications to assign a name (a C character string) to each thread, and to read that name from an arbitrary, given thread.</p><p>Once this option is enabled, the kernel's internal thread abstraction data structure (a C ++ class named Cyg_Thread) is extended by a name element (again by means of preprocessor macros, cf. Figure <ref type="figure" target="#fig_2">4</ref>), thus saving memory (and OS code, in other parts of eCos) if this functionality is not needed.</p><p>Nevertheless, the kernel's C API is not affected at all: Regardless of how the application developer configures eCos, the API function cyg_thread_create(...) always takes a name parameter (which is ignored if the kernel cannot store thread names), and the API function cyg_thread_get_info(...) always fills a data structure (struct cyg_thread_info) which has a name element. An application developer who does not want to give a thread a name simply passes NULL instead of a character string. If the kernel does not know a thread's name, or is not capable of storing thread names, cyg_thread_get_info(...) returns NULL in the name element of cyg_thread_info.</p><p>This API definition allows to concentrate on an application's usage of cyg_thread_create(...) and cyg_thread_get_info(...) for automatic configuration of this feature:</p><p>Iff the application passes a non-NULL parameter value to cyg_thread_create(...)'s name parameter, and calls cyg_thread_get_info(...) and reads the name element of its return value, the feature "Support optional name for each thread" is needed. This condition is not completely conclusive, though: An application developer may create threads with names just for self-documenting purposes without needing the kernel to store this information. An application may even read the name element and expect it to be NULL. Nevertheless there is a strong indication that the feature is needed, so the configuration tool could give the application developer a hint to enable it.</p><p>3) Domain specific patterns: Some options exhibit an inherent complexity, and are, due to their interrelation with concurrency and synchronization aspects, highly OS specific. An extreme example is the option "Priority inversion protection protocols" in the "Synchronization primitives" component: It controls whether synchronization primitives should be protected against priority inversion <ref type="bibr" target="#b10">[11]</ref>.</p><p>As this feature comes with quite some cost (program memory, CPU cycles at runtime), it should only be enabled if priority inversion is a problem in the application at all:</p><p>Iff the application is structured in a way that priority inversion can occur, the feature "Priority inversion protection protocols" is needed. Unfortunately, detecting this property in an application is not trivial and can only be approached with an approximation:</p><p>Iff at least two threads with different priority levels share a common mutex, and a thread with a priority level between these two exists, the feature "Priority inversion protection protocols" is needed. There are several reasons why an application developer still may not need this feature: The application may be designed in a way that priority inversion is prevented by other means, or the occurrence of this effect may even be intended. So, again, the configuration tool should only give a hint. 4) Not derivable: For the remaining features we were unable to pose feature conditions, for different reasons. A detailed analysis of this category follows in section V.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>B. Implications for Static Analysis and Model Checking</head><p>The eCos features we examined and the resulting feature conditions imply several requirements on the application analysis:</p><p>• Feature conditions that relate only to the existence of certain API calls, the least complex category identified in the previous subsection, could more or less be checked by simple text search utilities like grep. The capabilities missing (and essential for well-founded automatic configuration decisions) are a deeper understanding of C syntax and semantics -for example to differentiate between an API function mentioned in a source code comment, and real API usage -and control flow properties that indicate whether the API calls are reachable at all. • Patterns as observed in the "Support optional name for each thread" example also demand for control flow information (connecting a cyg_thread_get_info(...) call to a subsequent use of its return value) and actual parameter values, implying the need for static analysis techniques like constant folding, constant propagation, inter-procedural reaching definitions analysis <ref type="bibr" target="#b20">[21]</ref>, or interval analysis. • Highly OS domain specific feature patterns concerning thread concurrency and synchronization aspects call for a very specialized program analysis technique which may not be possible to generalize further. Our first attempt to deal with these is described in subsection IV-D.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>IV. STATIC APPLICATION ANALYSIS AND DETERMINATION OF FEATURE NEED A. Static Analysis of eCos Applications</head><p>The first step in statically deriving information from application source code is transforming it into a model suitable for the subsequent analysis steps -suitable in a way that the transformation does not lose information relevant for the problem space, leading to incorrect configuration decisions. Our examination of eCos features suggests that a C-statementlevel control flow graph (CFG) fulfills our requirements, as it maintains temporal interrelations between API calls and return value usage, and allows for reachability analysis. A CFG can also be subject to further data flow analysis and transformation steps that propagate actual values to nodes where they are passed through the OS API. Additionally, a CFG is generic enough that it still holds enough program information for the highly OS specific analyses sketched in subsection III-A3.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>B. Formalizing Feature Conditions and Model Checking</head><p>Motivated by our own earlier results <ref type="bibr" target="#b23">[24]</ref> and promising achievements in other projects applying model checking to identify patterns in application code (such as <ref type="bibr" target="#b9">[10]</ref>), we decided to use the temporal logic CTL as a language to formalize feature conditions. CTL can express temporal relationships, and there exist efficient model checking algorithms <ref type="bibr" target="#b3">[4]</ref>, <ref type="bibr" target="#b9">[10]</ref> for this logic.</p><p>We model the CFG of the application program as a Kripke structure <ref type="bibr" target="#b3">[4]</ref> M = (S, S 0 , R, L) over atomic propositions P , where S is a (finite) set of states (representing statement-level CFG nodes), S 0 is a set of initial states, R ⊆ S × S is a total transition relation, and L : S → 2 P is a labeling function that associates a subset of P to each state. A proposition p holds in a state s, if p is contained in the label of s, i.e., p ∈ L(s). A path π, starting at state s, is a sequence of states π = s 0 s 1 s 2 s 3 . . . with s 0 = s and R(s i , s i+1 ) for all i ≥ 0.</p><p>CTL formulas allow to specify temporal properties of Kripke structures by extending classical predicate logic by temporal connectives which establish a relationship to future states:</p><p>• Every atomic proposition p ∈ P is a CTL formula.</p><p>• If p and q are CTL formulas, ¬p, p ∧ q, p ∨ q, AX p, EX p, AG p, EG p, A[p U q] and E[p U q] are valid formulas, too. X is the nexttime operator: AX p (resp. EX p) means that p holds in every (in some) immediate successor state. G is the global operator: AG p (resp. EG p) states that p holds in all (in some) future states. U is the until operator: A[p U q] (resp. E[p U q], cf. Subfigure <ref type="figure" target="#fig_3">5a</ref>) expresses that for every (for some) path starting with the current state, there exists an initial prefix of this path such that q holds at the last state of this prefix, and p holds in all other states of the prefix <ref type="bibr" target="#b2">[3]</ref>. • The finally operators AF and EF can be seen as an abbreviated form of the until operators with p = true (cf. Sub-figures 5b and 5c): They mean that on all (on some) paths the operand will hold sometime in the future (AF q ⇔ A[true U q]). Figure <ref type="figure" target="#fig_3">5</ref> and the examples later in this subsection may help gaining a more intuitive understanding of CTL.</p><p>For the feature conditions identified in subsection III-A we additionally define an elementary set of atomic propositions: For now ignoring the ". . . and reads the name element of its return value, . . . " part of the condition, we can also express the condition from subsection III-A2:</p><p>EF ( [call :cyg_thread_create(. . .)] ∧ ¬[call :cyg_thread_create(?, ?, ?, 0, ?, ?, ?, ?)] ∧ EX EF [call :cyg_thread_get_info(. . .)] )</p><p>In order to formulate this condition completely, we would need another atomic proposition for data structure access and a means to express the connection between the variable returned by cyg_thread_get_info(...) and the point where its member name is accessed. (See the discussion in subsection IV-D for a solution to this problem.)</p><p>A model checking algorithm can now check whether the application's Kripke structure is a model for a CTL formulaiff this is the case, the feature condition is fulfilled. Starting with the atomic propositions used in the CTL formula, and recursively continuing with more and more complex subformulas, each Kripke node is labeled with the sub-formulas holding for this particular node. This procedure is iterated until it can be determined whether the complete formula holds in a starting node. For more details on the model checking algorithm we refer to Clarke's original publication <ref type="bibr" target="#b2">[3]</ref>.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>C. Inferring Feature Need</head><p>Although not accounted for in section III-A, our examination of eCos features showed that often multiple feature conditions are necessary to exhaustively describe the possible API usage patterns that signify an application's need or non-need for a certain feature. Some conditions only help deciding for or against feature need, not both: Once a single necessary (in the mathematical sense) condition is not fulfilled, the feature this condition belongs to is not needed; once a single sufficient condition is fulfilled, the feature is definitely needed. In both cases, the respective converse decision cannot be taken: The fulfillment of a necessary condition does not allow a statement on feature need.</p><p>Another orthogonal condition property is weakness: If a condition should only be used to give the user a configuration hint instead of making a fully automated configuration decision, it is called a weak condition (examples are the conditions in subsections III-A2 and III-A3), or else a definite condition.</p><p>The model checking results for all conditions of a certain feature can be combined to a resulting statement on whether the feature should be enabled or disabled. Figure <ref type="figure">6</ref> assembles the following propositions: N ⇔ all definite, necessary conditions are fulfilled (or none exists). n ⇔ all weak, necessary conditions are fulfilled (or none exists). S ⇔ some definite, sufficient condition is fulfilled. s ⇔ some weak, sufficient condition is fulfilled.</p><p>One remaining case still needs to be dealt with: If a condition cannot be successfully checked (e.g., because data flow analysis fails, and therefore the possible value(s) of an actual parameter cannot be determined), we can safely proceed pretending this condition did not exist in the first place, as evidently the resulting statement is not falsified by that measure. The user should still be informed about the omission of a feature condition, as a simple code change may make the analysis possible again.</p><p>Finally, the internal dependency and restriction constraints in the eCos configuration tree need to be taken into account -a feature not directly needed by the application may still be mandatory because another feature depends on it. This </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>D. Discussion</head><p>The quality of results obtained from model checking can only be as good as the model being checked, which in the case of control and data flow graphs (at least for real-world code input) may not yield all necessary information (e.g., failing to trace actual parameters to the place they are defined, or not being able to determine the number of iterations a loop can make). Static code analysis is well-known to be limited in theory and practice <ref type="bibr" target="#b9">[10]</ref>, <ref type="bibr" target="#b11">[12]</ref>, <ref type="bibr" target="#b18">[19]</ref>, <ref type="bibr" target="#b20">[21]</ref>, but nevertheless we believe that these limits are not pivotal for our approach: Even if some configuration decisions cannot be automated because static analysis fails, and the application developer has to configure the respective features manually, the overall configuration effort is still significantly reduced. Additionally, this problem could be tackled by trying to reduce the complexity of static analysis. An interesting research question in this context would be: What modifications to an infrastructure's API might be adequate to facilitate static analysis and therefore improve the quality of automatic configuration decisions?</p><p>Another related open question is what API the application should be initially written against: As the API may be affected by configuration decisions, a circular dependency exists. In principle, a "full" API encompassing all possible configurations (something Fröhlich <ref type="bibr" target="#b6">[7]</ref> calls an inflated interface) needs to be generated. This may not be possible if two API variants conflict (e.g., a function cannot have two different signatures in the C programming language), although this was not the case for eCos: We were able to manually create a set of header files valid for all possible variants.</p><p>The additional expressiveness demanded in subsection IV-B -CTL's lack of a means to connect several usage points of a single variable -could be handled by a CTL extension: With CTPL, Kinder et al. <ref type="bibr" target="#b9">[10]</ref> proposed such an extension to CTL that allows for expressing such connections by introducing free variables (placeholders). Their modified model checking algorithm was shown to be still efficient.</p><p>Unfortunately, neither CTL nor CTPL are expressive enough to cover complex feature conditions such as described in subsection III-A3. Our first attempt to deal with these highly OS domain specific conditions is to encapsulate them in small plug-ins, so-called configlets, written in C ++ against an analysis API giving direct access to the underlying CFG (cf. Figure <ref type="figure">7</ref>). A configlet can be used in place of a CTL formula, its output is processed the same way (cf. Figure <ref type="figure">6</ref>). We are still unsure about what the interface between a configlet and the remaining analysis tool interface should look like, and are trying to find an adequate balance between a complex API with complete access to the Kripke model, and a minimal, easier to use API which still is generic enough to deal with new use cases.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>V. RESULTS</head></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>A. eCos examination</head><p>The manual examination of 39 eCos features (cf. subsection III-A) resulted in a categorization into four feature categories, bearing various levels of complexity for automatic analysis. Table I lists all features, their type, their feature category, and the types of feature conditions we formulated.</p><p>• 7 out of 39 features were categorized into "Simple API call usage". • 5 features fall in the "API call patterns and actual parameters" category: Two of these need the CTL extension mentioned in subsection IV-D. • 6 features are highly OS specific and belong to the "Domain specific patterns" category. We were able to formulate conditions for these features, but CTL (and CTPL) turned out to be insufficient. 19 features were categorized to be not derivable from an application's source code, for different reasons:</p><p>• The largest group <ref type="bibr" target="#b12">(13)</ref>   code inlining), timing/throughput behavior, stack sizes, or runtime safety checks (e.g., stack canaries). • 4 features could not be examined in detail due to their unclear semantics. Among these 19 features, 6 were additionally identified to be of interest only for the development process and/or debugging purposes. For example, "Output stack usage on thread exit" creates debugging output once a thread terminates -a feature the developer, despite being eager for automatic configuration, still would want to configure manually due to its purpose in the development process context.</p><p>The remaining two features even seem only to be there for self-documentation reasons, as they are tightly coupled with other features by dependency relationships and cannot be directly configured by the user anyways (e.g., "Idle thread must always yield" is automatically enabled once there is only a single priority level configured).</p><p>Altogether, we were able to pose feature conditions for about half of the examined features (18 out of 37 "real" features).</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>B. Implementation and preliminary evaluation</head><p>The prototype implementation of the described analysis and model checking steps is still very preliminary and has not yet been thoroughly tested with real-world code input. Nevertheless, our test runs with simple CTL formulas and a suite of eCos test programs (shipped with eCos 3.0), cloned and adapted for testing specific units of the prototype, are promising and will soon be extended to a full-scale evaluation.</p><p>The analysis tool prototype is based on clang, an LLVM [13] compiler front-end for the C, C ++ and Objective-C languages. The complete static analysis phase (scanning and parsing the application's C code, performing constant folding and propagation) is externalized to clang. The resulting CFG is then transformed to a Kripke structure. A C ++ implementation of Clarke's CTL model checking algorithm <ref type="bibr" target="#b3">[4]</ref> is currently capable of checking single CTL formulas and combining the results for a configuration decision. Besides the sub-condition requiring a CTL extension (cf. subsection IV-D), all feature conditions categorized in subsections III-A1 and III-A2 can already be checked. A prototype configlet for the example condition in subsection III-A3 is under development.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>VI. RELATED WORK</head><p>There exist numerous research projects engaging in application-driven tailoring of infrastructure software. The concept of Application-Oriented System Design was introduced by Fröhlich <ref type="bibr" target="#b6">[7]</ref> in the EPOS operating system. Here the set of infrastructure symbols (i.e., a temporally unordered list of API calls) referenced by the application determines which product line variant is needed. If multiple variants fulfill the requirements, the least resource expensive one (in a fixed, manually defined cost ordering of variants) is chosen. Apart from the comparably simple static analysis the main difference to our approach is the lack of logical isolation between analysis and configuration, established by a feature model.</p><p>Evaluating their JiM (Just-in-time middleware) paradigm, Zhang et al. <ref type="bibr" target="#b28">[29]</ref> tailor the middleware product line Abacus (a CORBA middleware implementation) according to the application's needs. In contrast to the focus of our work, they completely ignore the task of derivation of feature need from the application. Source code annotations are added to the application code to make the feature requirements explicit; the difference to manual infrastructure configuration is marginal and debatable. In their customizable embedded DREAMS OS, Böke, Chivukula et al. <ref type="bibr" target="#b0">[1]</ref>, <ref type="bibr" target="#b1">[2]</ref> also achieve infrastructure tailoring by supplying an explicit requirements specification. The specification is on a lower abstraction level than in the Abacus case, though: The system calls and their properties (precedence relation, number of calls, etc.) made by each process are explicitly listed. The DREAMS tailoring approach also benefits from the OS being explicitly designed for automatic configuration.</p><p>Focusing mostly on functional infrastructure properties, the aforementioned projects insufficiently deal with non-functional properties (such as code size, memory usage at runtime, timing behavior etc.). These properties have an emergent nature and therefore often cannot be directly configured, nevertheless some research work exists in this field. Pu, Massala et al. developed the research operating system Synthesis <ref type="bibr" target="#b21">[22]</ref> which adapts to and self-optimizes for the application's API usage patterns at runtime. Supplied by a just-in-time compiler, often used code paths are partially evaluated and tuned to high throughput. Sincero, Hofer et al. <ref type="bibr" target="#b7">[8]</ref>, <ref type="bibr" target="#b25">[26]</ref> are developing feedback approach which systematically collects information on emerging nonfunctional properties in the CiAO <ref type="bibr" target="#b13">[14]</ref> operating system to be able to make educated predictions for unknown configurations. This information could be used to automatically (based on a user-defined non-functional optimization goal) select one of several variants which are functionally equivalent but exhibit different non-functional properties, therefore complementing our approach.</p><p>Outside the context of infrastructure software tailoring, there exist many other research projects that apply static analysis and model checking to problems in their domain. For example, Padioleau, Lawall et al. <ref type="bibr" target="#b19">[20]</ref> utilize CTL for matching and replacing code in order to deal with collateral evolutions in the Linux kernel. The SmPL language can be used to define so-called semantic patches which can automatically be transformed into CTL formulas. Another example comes from the systems security domain: Kinder et al. <ref type="bibr" target="#b9">[10]</ref> formidably show the applicability of static analysis model checking to the generic detection of malicious code.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>VII. CONCLUSIONS AND FUTURE WORK</head><p>Our examination of a subset of eCos features showed that for about half of these we can, at least informally, define feature conditions which allow deducing feature need from an application's source code. Aiming at automating the evaluation of these conditions, we identified control flow graphs, transformed to a Kripke structure, as an adequate model which carries enough information for subsequent analysis steps. The branching-time logic CTL was attested to be expressive enough for many but not all feature conditions we found: For a few cases it needs to be extended with free variables, or even supplemented by configlets, specialized analysis plugins written in a normal programming language. The first preliminary evaluation results with our analysis tool prototype are promising, although we cannot already draw conclusions regarding the scalability of our approach.</p><p>Although the configuration automation of about 50% of the examined features may not seem exceedingly successful, extrapolating this to all configurable eCos features 3 we could still save the application developer about 750 configuration decisions. For parts of the remaining half, especially the features dealing with non-functional properties, the feedback approach of Sincero et al. <ref type="bibr" target="#b7">[8]</ref>, <ref type="bibr" target="#b25">[26]</ref> could offer other means of automatic configuration.</p><p>Our results are comparable to an earlier case study we conducted with a modified version of the Berkeley DB <ref type="bibr" target="#b23">[24]</ref>, an embedded DBMS for which we could automate an even larger portion of configuration decisions -mostly due to simpler API usage patterns and a lower quantity of features dealing with non-functional properties.</p><p>More future work includes examining additional eCos features in order to gain more confidence on the general soundness of our approach. We also intend to evaluate the outlined extension to CTL, to compare it to other (potentially more powerful) temporal logics, and to integrate the analysis results in the eCos Configtool. In order to alleviate the infrastructure developer's task to describe feature conditions, we are also going to look into simpler description languages that can be automatically transformed into temporal logic formulas; Kinder et al. <ref type="bibr" target="#b9">[10]</ref> suggest using macro shortcuts for the most commonly used patterns, which may prove to suffice.</p><p>Beyond these enhancements and a thorough evaluation of the outlined approach, we are looking into the research question what modifications to the infrastructure API are necessary to simplify the analysis task such that a vast majority of features can be automatically configured. Ideally, only a tiny fraction consisting of development time (debugging) and non-functional (runtime safety checks, stack sizes, runtime/code size tradeoffs) configuration decisions remains, and we believe this could be achieved by designing the API with this ambition in mind.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Figure 2 :</head><label>2</label><figDesc>Figure 2: The eCos Configtool with a hierarchical display of components and different types of options.</figDesc><graphic coords="2,311.97,54.00,251.05,251.05" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>Figure 3 :</head><label>3</label><figDesc>Figure 3: Instantiating an eCos variant: User configuration drives the product generation, yielding a tailored variant implementing only the desired features.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_2"><head>Figure 4 :</head><label>4</label><figDesc>Figure 4: An excerpt from an eCos 3.0 internal kernel header file: The effect of a GUI configuration option on an internal thread abstraction data structure.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_3"><head>Figure 5 :</head><label>5</label><figDesc>Figure 5: Examples for simple CTL formulas and corresponding state trees.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_4"><head>ACoTA 2010 First</head><label>2010</label><figDesc>International Workshop on Automated Tailoring and Configuration of Applications</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_0"><head></head><label></label><figDesc>Now we can formulate a subset of the feature conditions from section III-A in CTL. The condition informally introduced in subsection III-A1 can be expressed as follows:</figDesc><table><row><cell>EF ( [call :cyg_mbox_put(. . .)] ∨</cell></row><row><cell>[call :cyg_mbox_timed_put(. . .)] )</cell></row></table><note>• The trivial proposition [true] holds in every, [false] in no state. • [call :somefunction(. . .)] holds in every state that contains a call to somefunction, ignoring its actual parameters. [call :somefunction(?, 4, ?)] holds if the second actual parameter is equal to 4.</note></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_2"><head></head><label></label><figDesc>are configurable non-functional properties that have an effect on code size (e.g., explicit ACoTA 2010 First International Workshop on Automated Tailoring and Configuration of ApplicationsFigure 7: Analysis process overview: Configlets complement CTL model checking for complex feature conditions.</figDesc><table><row><cell>Feature name</cell><cell>Type</cell><cell>Feature condition types found</cell><cell>Category</cell></row><row><cell>Multi-level queue scheduler</cell><cell>one-from-many</cell><cell>sufficient</cell><cell>3</cell></row><row><cell>Bitmap scheduler</cell><cell>one-from-many</cell><cell>necessary</cell><cell>3</cell></row><row><cell>Number of priority levels</cell><cell>value (1-32)</cell><cell>3×sufficient</cell><cell>3</cell></row><row><cell>Dequeue highest priority threads first</cell><cell>binary</cell><cell>-</cell><cell>4</cell></row><row><cell>Scheduler timeslicing</cell><cell>binary</cell><cell>1×necessary, 1×sufficient (weak)</cell><cell>3</cell></row><row><cell>Number of ticks between timeslices</cell><cell>value</cell><cell>-</cell><cell>4</cell></row><row><cell>Support runtime enable of timeslice per-thread</cell><cell>binary</cell><cell>necessary/sufficient</cell><cell>1</cell></row><row><cell>Enable ASR support</cell><cell>binary</cell><cell>-</cell><cell>4</cell></row><row><cell>Make ASR function global</cell><cell>binary</cell><cell>-</cell><cell>4</cell></row><row><cell>Make ASR data global</cell><cell>binary</cell><cell>-</cell><cell>4</cell></row><row><cell>Priority inversion protection protocols</cell><cell>binary</cell><cell>necessary/sufficient (weak)</cell><cell>3</cell></row><row><cell>Enable priority inheritance protocols</cell><cell>binary</cell><cell>necessary/sufficient</cell><cell>2</cell></row><row><cell>Enable priority ceiling protocol</cell><cell>binary</cell><cell>necessary/sufficient</cell><cell>2</cell></row><row><cell>Default priority inversion protocol</cell><cell>one-from-many</cell><cell>-</cell><cell>4</cell></row><row><cell>Specify mutex priority inversion protocol at runtime</cell><cell>binary</cell><cell>necessary/sufficient</cell><cell>1</cell></row><row><cell>Use mboxt_plain mbox implementation</cell><cell>binary</cell><cell>(sufficient)</cell><cell>4</cell></row><row><cell>Message box blocking put support</cell><cell>binary</cell><cell>necessary/sufficient</cell><cell>1</cell></row><row><cell>Message box queue size</cell><cell>value</cell><cell>-</cell><cell>4</cell></row><row><cell>Condition variable timed-wait support</cell><cell>binary</cell><cell>necessary/sufficient</cell><cell>1</cell></row><row><cell>Condition variable explicit mutex wait support</cell><cell>binary</cell><cell>necessary/sufficient</cell><cell>2</cell></row><row><cell>Avoid inlines in mqueue implementation</cell><cell>binary</cell><cell>-</cell><cell>4</cell></row><row><cell>Allow per-thread timers</cell><cell>binary</cell><cell>-</cell><cell>4</cell></row><row><cell>Support optional name for each thread</cell><cell>binary</cell><cell>1×necessary, 1×sufficient</cell><cell>2</cell></row><row><cell>Keep track of all threads using a linked list</cell><cell>binary</cell><cell>1×sufficient</cell><cell>1</cell></row><row><cell>Keep track of the base of each thread's stack</cell><cell>(binary)</cell><cell>-</cell><cell>(4)</cell></row><row><cell>Check thread stacks for overflows</cell><cell>binary</cell><cell>-</cell><cell>4</cell></row><row><cell>Check all threads whenever possible</cell><cell>binary</cell><cell>-</cell><cell>4</cell></row><row><cell>Signature size in bytes, at stack top and bottom</cell><cell>value (8-512)</cell><cell>-</cell><cell>4</cell></row><row><cell>Measure stack usage</cell><cell>binary</cell><cell>necessary/sufficient</cell><cell>2</cell></row><row><cell>Output stack usage on thread exit</cell><cell>binary</cell><cell>-</cell><cell>4</cell></row><row><cell>Support for per-thread data</cell><cell>binary</cell><cell>necessary/sufficient</cell><cell>1</cell></row><row><cell>Number of words of per-thread data</cell><cell>value (4-32)</cell><cell>-</cell><cell>4</cell></row><row><cell>Thread destructors</cell><cell>binary</cell><cell>necessary/sufficient</cell><cell>1</cell></row><row><cell>Number of possible destructors</cell><cell>value (1-65535)</cell><cell>necessary/sufficient</cell><cell>3</cell></row><row><cell>Per-thread destructors</cell><cell>binary</cell><cell>-</cell><cell>4</cell></row><row><cell>Stack size for the idle thread</cell><cell>value (512-65536)</cell><cell>-</cell><cell>4</cell></row><row><cell>Maximal suspend count</cell><cell>value</cell><cell>-</cell><cell>4</cell></row><row><cell>Maximal wake count</cell><cell>value</cell><cell>-</cell><cell>4</cell></row><row><cell>Idle thread must always yield</cell><cell>(binary)</cell><cell>-</cell><cell>(4)</cell></row></table></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_3"><head>Table I :</head><label>I</label><figDesc>The examined eCos features, listed with the feature category (cf. subsection III-A) and the condition types. The condition types found are definite unless explicitly denoted weak. Category legend: 1) Simple API call usage, 2) API call patterns and actual parameters, 3) Domain specific patterns, 4) Not derivable.</figDesc><table /></figure>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="2" xml:id="foot_0">eCos release</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="3" xml:id="foot_1">.0; platform specific HAL and device driver features not counted inACoTA 2010First International Workshop on Automated Tailoring and Configuration of Applications</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" xml:id="foot_2">ACoTA 2010First International Workshop on Automated Tailoring and Configuration of Applications</note>
		</body>
		<back>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<monogr>
		<title level="m" type="main">Automatic Configuration of Real-Time Operating Systems and Real Time Communication Systems for Distributed Embedded Applications</title>
		<author>
			<persName><forename type="first">Carsten</forename><surname>Böke</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2004">2004</date>
			<publisher>Entwurf Paralleler Systeme</publisher>
		</imprint>
		<respStmt>
			<orgName>Universität Paderborn, Heinz Nixdorf Institut</orgName>
		</respStmt>
	</monogr>
	<note type="report_type">Dissertation</note>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">Customizing the configuration process of an operating system using hierarchy and clustering</title>
		<author>
			<persName><forename type="first">Prasad</forename><surname>Ramakrishna</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Carsten</forename><surname>Chivukula</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Franz</forename><forename type="middle">J</forename><surname>Boeke</surname></persName>
		</author>
		<author>
			<persName><surname>Rammig</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 5th IEEE International Symposium on Object-Oriented Real-Time Distributed Computing (ISORC &apos;02)</title>
				<meeting>the 5th IEEE International Symposium on Object-Oriented Real-Time Distributed Computing (ISORC &apos;02)</meeting>
		<imprint>
			<date type="published" when="2002">2002</date>
			<biblScope unit="volume">0</biblScope>
			<biblScope unit="page">280</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">Automatic verification of finite-state concurrent systems using temporal logic specifications</title>
		<author>
			<persName><forename type="first">E</forename><forename type="middle">M</forename><surname>Clarke</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><forename type="middle">A</forename><surname>Emerson</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><forename type="middle">P</forename><surname>Sistla</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">ACM Transactions on Programming Languages and Systems (TOPLAS)</title>
		<imprint>
			<biblScope unit="volume">2</biblScope>
			<biblScope unit="issue">8</biblScope>
			<biblScope unit="page" from="244" to="263" />
			<date type="published" when="1986">1986</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<monogr>
		<title level="m" type="main">Model Checking</title>
		<author>
			<persName><forename type="first">Edmund</forename><forename type="middle">M</forename><surname>Clarke</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Orna</forename><surname>Grumberg</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Doron</forename><forename type="middle">A</forename><surname>Pele</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2001">2001</date>
			<publisher>The MIT Press</publisher>
			<pubPlace>Cambridge, Massachusetts and London, England</pubPlace>
		</imprint>
	</monogr>
	<note>3 edition</note>
</biblStruct>

<biblStruct xml:id="b4">
	<monogr>
		<title level="m" type="main">Software Product Lines: Practices and Patterns</title>
		<author>
			<persName><forename type="first">Paul</forename><surname>Clements</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Linda</forename><surname>Northrop</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2002">2002</date>
			<publisher>Addison-Wesley</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">Generative Programming</title>
		<author>
			<persName><forename type="first">Krysztof</forename><surname>Czarnecki</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Ulrich</forename><forename type="middle">W</forename><surname>Eisenecker</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Methods, Tools and Applications</title>
				<imprint>
			<publisher>Addison-Wesley</publisher>
			<date type="published" when="2000-05">May 2000</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">Application-Oriented Operating Systems</title>
		<author>
			<persName><forename type="first">A</forename><surname>Fröhlich</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Number 17</title>
		<title level="s">GMD Research Series</title>
		<meeting><address><addrLine>Sankt Augustin</addrLine></address></meeting>
		<imprint>
			<publisher>GMD -Forschungszentrum Informationstechnik</publisher>
			<date type="published" when="2001-08">August 2001</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">Configuration of Non-Functional Properties in Embedded Operating Systems: The CiAO Approach</title>
		<author>
			<persName><forename type="first">Wanja</forename><surname>Hofer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Julio</forename><surname>Sincero</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Daniel</forename><surname>Lohmann</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Wolfgang</forename><surname>Schröder-Preikschat</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Methodologies for Non-Functional Requirements in Service Oriented Architecture</title>
				<meeting><address><addrLine>Hershey, PA, USA</addrLine></address></meeting>
		<imprint>
			<publisher>IGI Global</publisher>
			<date type="published" when="2010">2010</date>
		</imprint>
	</monogr>
	<note>To Appear)</note>
</biblStruct>

<biblStruct xml:id="b8">
	<monogr>
		<title level="m" type="main">Featureoriented domain analysis (FODA) feasibility study</title>
		<author>
			<persName><forename type="first">K</forename><surname>Kang</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Cohen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Hess</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><surname>Novak</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Peterson</surname></persName>
		</author>
		<imprint>
			<date type="published" when="1990-11">November 1990</date>
			<pubPlace>Pittsburgh, PA</pubPlace>
		</imprint>
		<respStmt>
			<orgName>Carnegie Mellon University, Software Engineering Institute</orgName>
		</respStmt>
	</monogr>
	<note type="report_type">Technical report</note>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<title level="a" type="main">Detecting malicious code by model checking</title>
		<author>
			<persName><forename type="first">Johannes</forename><surname>Kinder</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Stefan</forename><surname>Katzenbeisser</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Christian</forename><surname>Schallhart</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Helmut</forename><surname>Veith</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">GI SIG SIDAR Conference on Detection of Intrusions and Malware &amp; Vulnerability Assessment (DIMVA 2005)</title>
		<title level="s">Lecture Notes in Computer Science</title>
		<editor>
			<persName><forename type="first">Klaus</forename><surname>Julisch</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">Christopher</forename><surname>Krügel</surname></persName>
		</editor>
		<imprint>
			<publisher>Springer-Verlag</publisher>
			<date type="published" when="2005">2005</date>
			<biblScope unit="volume">3548</biblScope>
			<biblScope unit="page" from="174" to="187" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<analytic>
		<title level="a" type="main">Experience with processes and monitors in mesa</title>
		<author>
			<persName><forename type="first">Butler</forename><forename type="middle">W</forename><surname>Lampson</surname></persName>
		</author>
		<author>
			<persName><forename type="first">David</forename><forename type="middle">D</forename><surname>Redell</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Communications of the ACM</title>
		<imprint>
			<biblScope unit="volume">23</biblScope>
			<biblScope unit="issue">2</biblScope>
			<biblScope unit="page" from="105" to="117" />
			<date type="published" when="1980">1980</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<analytic>
		<title level="a" type="main">Undecidability of static analysis</title>
		<author>
			<persName><forename type="first">William</forename><surname>Landi</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">ACM Letters on Programming Languages and Systems</title>
		<imprint>
			<biblScope unit="volume">1</biblScope>
			<biblScope unit="issue">4</biblScope>
			<biblScope unit="page" from="323" to="337" />
			<date type="published" when="1992">1992</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b12">
	<monogr>
		<ptr target="http://www.llvm.org/" />
		<title level="m">LLVM homepage</title>
				<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<analytic>
		<title level="a" type="main">CiAO: An aspect-oriented operating-system family for resource-constrained embedded systems</title>
		<author>
			<persName><forename type="first">Wanja</forename><surname>Daniel Lohmann</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Wolfgang</forename><surname>Hofer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Jochen</forename><surname>Schröder-Preikschat</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Olaf</forename><surname>Streicher</surname></persName>
		</author>
		<author>
			<persName><surname>Spinczyk</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 2009 USENIX Annual Technical Conference</title>
				<meeting>the 2009 USENIX Annual Technical Conference<address><addrLine>Berkeley, CA, USA</addrLine></address></meeting>
		<imprint>
			<publisher>USENIX Association</publisher>
			<date type="published" when="2009-06">June 2009</date>
			<biblScope unit="page" from="215" to="228" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<analytic>
		<title level="a" type="main">A quantitative analysis of aspects in the eCos kernel</title>
		<author>
			<persName><forename type="first">Fabian</forename><surname>Daniel Lohmann</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Reinhard</forename><surname>Scheler</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Olaf</forename><surname>Tartler</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Wolfgang</forename><surname>Spinczyk</surname></persName>
		</author>
		<author>
			<persName><surname>Schröder-Preikschat</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the EuroSys 2006 Conference (EuroSys &apos;06)</title>
				<meeting>the EuroSys 2006 Conference (EuroSys &apos;06)<address><addrLine>New York, NY, USA</addrLine></address></meeting>
		<imprint>
			<publisher>ACM Press</publisher>
			<date type="published" when="2006-04">April 2006</date>
			<biblScope unit="page" from="191" to="204" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<analytic>
		<title level="a" type="main">Lean and efficient system software product lines: Where aspects beat objects</title>
		<author>
			<persName><forename type="first">Olaf</forename><surname>Daniel Lohmann</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Wolfgang</forename><surname>Spinczyk</surname></persName>
		</author>
		<author>
			<persName><surname>Schröder-Preikschat</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Transactions on AOSD II</title>
		<title level="s">Lecture Notes in Computer Science</title>
		<editor>
			<persName><forename type="first">Awais</forename><surname>Rashid</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">Mehmet</forename><surname>Aksit</surname></persName>
		</editor>
		<imprint>
			<publisher>Springer-Verlag</publisher>
			<date type="published" when="2006">2006</date>
			<biblScope unit="volume">4242</biblScope>
			<biblScope unit="page" from="227" to="255" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b16">
	<monogr>
		<title level="m" type="main">Embedded Software Development with eCos</title>
		<author>
			<persName><forename type="first">Anthony</forename><surname>Massa</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2002">2002</date>
			<publisher>Prentice Hall Professional Technical Reference</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b17">
	<analytic>
		<title level="a" type="main">LavA: An open platform for rapid prototyping of MPSoCs</title>
		<author>
			<persName><forename type="first">Matthias</forename><surname>Meier</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Michael</forename><surname>Engel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Matthias</forename><surname>Steinkamp</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Olaf</forename><surname>Spinczyk</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 20th International Conference on Field Programmable Logic and Applications (FPL &apos;10)</title>
				<meeting>the 20th International Conference on Field Programmable Logic and Applications (FPL &apos;10)<address><addrLine>Milano, Italy</addrLine></address></meeting>
		<imprint>
			<publisher>IEEE Computer Society Press</publisher>
			<date type="published" when="2010">2010</date>
		</imprint>
	</monogr>
	<note>to appear</note>
</biblStruct>

<biblStruct xml:id="b18">
	<monogr>
		<title level="m" type="main">Software tamper resistance based on the difficulty of interprocedural analysis</title>
		<author>
			<persName><forename type="first">Toshio</forename><surname>Ogiso</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Yusuke</forename><surname>Sakabe</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Masakazu</forename><surname>Soshi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Atsuko</forename><surname>Miyaji</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2002-08">August 2002</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b19">
	<analytic>
		<title level="a" type="main">Documenting and automating collateral evolutions in linux device drivers</title>
		<author>
			<persName><forename type="first">Yoann</forename><surname>Padioleau</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Julia</forename><surname>Lawall</surname></persName>
		</author>
		<author>
			<persName><forename type="first">René</forename><surname>Rydhof Hansen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Gilles</forename><surname>Muller</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the EuroSys 2008 Conference (EuroSys &apos;08)</title>
				<meeting>the EuroSys 2008 Conference (EuroSys &apos;08)<address><addrLine>New York, NY, USA</addrLine></address></meeting>
		<imprint>
			<publisher>ACM Press</publisher>
			<date type="published" when="2008">2008</date>
			<biblScope unit="page" from="247" to="260" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b20">
	<analytic>
		<title level="a" type="main">Interprocedural def-use associations for c systems with single level pointers</title>
		<author>
			<persName><forename type="first">H</forename><forename type="middle">D</forename><surname>Pande</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><forename type="middle">A</forename><surname>Landi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><forename type="middle">G</forename><surname>Ryder</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Transactions on Software Engineering</title>
		<imprint>
			<biblScope unit="volume">20</biblScope>
			<biblScope unit="issue">5</biblScope>
			<biblScope unit="page" from="385" to="403" />
			<date type="published" when="1994">1994</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b21">
	<analytic>
		<title level="a" type="main">The Synthesis kernel</title>
		<author>
			<persName><forename type="first">Calton</forename><surname>Pu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Henry</forename><surname>Massalin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">John</forename><surname>Ioannidis</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Computing Systems</title>
		<imprint>
			<biblScope unit="volume">1</biblScope>
			<biblScope unit="issue">1</biblScope>
			<biblScope unit="page" from="11" to="32" />
			<date type="published" when="1988">1988</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b22">
	<analytic>
		<title level="a" type="main">FAME-DBMS: Tailor-made Data Management Solutions for Embedded Systems</title>
		<author>
			<persName><forename type="first">Marko</forename><surname>Rosenmüller</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Norbert</forename><surname>Siegmund</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Horst</forename><surname>Schirmeier</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Julio</forename><surname>Sincero</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Sven</forename><surname>Apel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Thomas</forename><surname>Leich</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Olaf</forename><surname>Spinczyk</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Gunter</forename><surname>Saake</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Workshop on Software Engineering for Tailor-made Data Management</title>
				<imprint>
			<date type="published" when="2008-03">March 2008</date>
			<biblScope unit="page" from="1" to="6" />
		</imprint>
		<respStmt>
			<orgName>School of Computer Science, University of Magdeburg</orgName>
		</respStmt>
	</monogr>
</biblStruct>

<biblStruct xml:id="b23">
	<analytic>
		<title level="a" type="main">Tailoring Infrastructure Software Product Lines by Static Application Analysis</title>
		<author>
			<persName><forename type="first">Horst</forename><surname>Schirmeier</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Olaf</forename><surname>Spinczyk</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 11th Software Product Line Conference (SPLC &apos;07)</title>
				<meeting>the 11th Software Product Line Conference (SPLC &apos;07)</meeting>
		<imprint>
			<publisher>IEEE Computer Society Press</publisher>
			<date type="published" when="2007">2007</date>
			<biblScope unit="page" from="255" to="260" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b24">
	<analytic>
		<title level="a" type="main">Is The Linux Kernel a Software Product Line?</title>
		<author>
			<persName><forename type="first">Julio</forename><surname>Sincero</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Horst</forename><surname>Schirmeier</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Wolfgang</forename><surname>Schröder-Preikschat</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Olaf</forename><surname>Spinczyk</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the International Workshop on Open Source Software and Product Lines (SPLC-OSSPL 2007)</title>
				<editor>
			<persName><forename type="first">Frank</forename><surname>Van Der Linden</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">Björn</forename><surname>Lundell</surname></persName>
		</editor>
		<meeting>the International Workshop on Open Source Software and Product Lines (SPLC-OSSPL 2007)<address><addrLine>Kyoto, Japan</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2007">2007</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b25">
	<analytic>
		<title level="a" type="main">Towards Tool Support for the Configuration of Non-Functional Properties in SPLs</title>
		<author>
			<persName><forename type="first">Julio</forename><surname>Sincero</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Wolfgang</forename><surname>Schröder-Preikschat</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Olaf</forename><surname>Spinczyk</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 42nd Hawai&apos;i International Conference on System Sciences (HICSS &apos;09)</title>
				<meeting>the 42nd Hawai&apos;i International Conference on System Sciences (HICSS &apos;09)<address><addrLine>Waikoloa, Big Island, Hawaii</addrLine></address></meeting>
		<imprint>
			<publisher>IEEE Computer Society Press</publisher>
			<date type="published" when="2009-01">January 2009</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b26">
	<analytic>
		<title level="a" type="main">Using Feature Models for Product Derivation</title>
		<author>
			<persName><forename type="first">Olaf</forename><surname>Spinczyk</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Holger</forename><surname>Papajewski</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 11th Software Product Line Conference (SPLC &apos;07)</title>
				<meeting>the 11th Software Product Line Conference (SPLC &apos;07)<address><addrLine>Kyoto, Japan</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2007-09">September 2007</date>
			<biblScope unit="page" from="5" to="6" />
		</imprint>
	</monogr>
	<note>Tutorial Description</note>
</biblStruct>

<biblStruct xml:id="b27">
	<monogr>
		<title level="m" type="main">The eCos Component Writer&apos;s Guide</title>
		<author>
			<persName><forename type="first">Bart</forename><surname>Veer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">John</forename><surname>Dallaway</surname></persName>
		</author>
		<ptr target="http://ecos.sourceware.org/docs-3.0/" />
		<imprint>
			<date type="published" when="2001">2001</date>
			<publisher>Free Software Foundation, Inc</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b28">
	<analytic>
		<title level="a" type="main">Towards just-intime middleware architectures</title>
		<author>
			<persName><forename type="first">Charles</forename><surname>Zhang</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Dapeng</forename><surname>Gao</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Hans-Arno</forename><surname>Jacobsen</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 4th International Conference on Aspect-Oriented Software Development (AOSD &apos;05)</title>
				<meeting>the 4th International Conference on Aspect-Oriented Software Development (AOSD &apos;05)<address><addrLine>New York, NY, USA</addrLine></address></meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2005">2005</date>
			<biblScope unit="page" from="63" to="74" />
		</imprint>
	</monogr>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
