1# x depends on (requires) y
2# 0 - no dependency, 1 - dependency, 2 - don't know
3# should have a way of saying optional, and disallowed
4# f - fundamental, fb - fundamental using barrelfish mechanisms, 
5# b - barrelfish implementation, i - implementation
6# assuming single machine (not network-based IDC)
7binding capability_mgmt	       		1	fb	# requires end points. also to be able to send/receive caps
8binding debugging			0
9binding driver				0
10binding device_man			0
11binding environment			0
12binding group_comm			1	f	# group communication functionality is accessed through the binding service
13binding lock_service			2	i	# implementation may use locking	
14binding mem_alloc			0		
15binding naming				0
16binding network_stack			0
17binding power_mgmt			0
18binding principals			0
19binding process_mgmt			0
20binding resource_acct_mgmt		0
21binding routing				1	f	# routed connections are managed through the binding service
22binding shell				0
23binding skb				1	fb	#  need to know about cores available, and to set up communication mechanisms
24binding storage_mgmt			0
25binding terminal			0
26binding threading			1	f	# binding needs to wake up threads in a dispatcher
27binding tracing				0
28binding VMachine			0
29binding VMem				1	i	# binding needs to set up shared memory
30capability_mgmt binding			1	b 	# needs to bind to other services and managers 
31capability_mgmt debugging		0
32capability_mgmt driver			0
33capability_mgmt device_man		0
34capability_mgmt environment		0
35capability_mgmt group_comm		2	i	# depends on how it communicates with capability managers on other cores
36capability_mgmt lock_service		0
37capability_mgmt mem_alloc		1	f	# needs memory (RAM caps) to create, move, etc. caps
38capability_mgmt naming			1	b	# needs to find other services and managers 
39capability_mgmt network_stack		0
40capability_mgmt power_mgmt		0
41capability_mgmt principals		0
42capability_mgmt process_mgmt		0
43capability_mgmt resource_acct_mgmt	0		
44capability_mgmt routing			0
45capability_mgmt shell			0
46capability_mgmt skb			0
47capability_mgmt storage_mgmt		0
48capability_mgmt terminal		0
49capability_mgmt threading		0
50capability_mgmt tracing			0
51capability_mgmt VMachine		0
52capability_mgmt VMem			0
53debugging binding			1	b	# needs to bind to other services and managers 
54debugging capability_mgmt		1	f	# need to inspect and modify cap allocations 
55debugging driver			0
56debugging device_man			0
57debugging environment			0
58debugging group_comm			0
59debugging lock_service			0
60debugging mem_alloc			0	
61debugging naming			1	b	# needs to find other services and managers 
62debugging network_stack			0
63debugging power_mgmt			0
64debugging principals			0
65debugging process_mgmt			1	f	# to debug at the process level, connect to processes etc.
66debugging resource_acct_mgmt		0
67debugging routing			0
68debugging shell				0
69debugging skb				2	fb	# ? does debug service need to know about system?
70debugging storage_mgmt			0
71debugging terminal			0
72debugging threading			1	f	# to debug at thread level, connect to threads, etc.
73debugging tracing			0		
74debugging VMachine			0
75debugging VMem				1	f	# inspect and modify memory mappings, page tables
76driver binding				1	b 	# needs to bind to other services and managers 
77driver capability_mgmt			1	fb	# device drivers need caps to their hardware
78driver debugging			0
79driver environment			0
80driver group_comm			0
81driver lock_service			2	i	# drivers may need locking
82driver mem_alloc			1	fb	# drivers need mem caps, e.g, for DMA
83driver naming				1	b	# needs to find other services and managers
84driver network_stack			0
85driver power_mgmt			2	f	# drivers need to know system power state (e.g., suspend, shut down, etc.). Note this could just be an interface they provide that is invoked by power manager rather than that drivers have to use power manager.
86driver principals			0
87driver process_mgmt			0
88driver resource_acct_mgmt		0
89driver routing				0
90driver shell				0
91driver skb				0
92driver storage_mgmt			0
93driver terminal				0
94driver threading			0
95driver tracing				0
96driver VMachine				0
97driver VMem				1	f	# drivers need to map memory for DMA, zero copy, etc.
98device_man binding			1	b 	# needs to bind to other services and managers 
99device_man capability_mgmt		0
100device_man debugging			0
101device_man environment			0
102device_man group_comm			0
103device_man lock_service			2	i
104device_man mem_alloc			0
105device_man naming			1	b	# needs to find other services and managers
106device_man network_stack		0
107device_man power_mgmt			2	f	# device manager needs to know system power state (e.g., suspend, shut down, etc.). Note this could just be an interface they provide that is invoked by power manager rather than that it have to use power manager.
108device_man principals			0
109device_man process_mgmt			0
110device_man resource_acct_mgmt		0
111device_man routing			0
112device_man shell			0
113device_man skb				1	fb	# device and bus management (eg PCI) needs to know what's in the system for assigning addresses etc. also register info
114device_man storage_mgmt			0
115device_man terminal			0
116device_man threading			0
117device_man tracing			0
118device_man VMachine			0
119device_man VMem				0
120environment binding			0
121environment capability_mgmt		0
122environment debugging			0
123environment driver			0
124environment device_man			0
125environment group_comm			0
126environment lock_service		0
127environment mem_alloc			0
128environment naming			0
129environment network_stack		0
130environment power_mgmt			0
131environment principals			2	f	# per user/session environment needs to know about users/sessions
132environment process_mgmt		2	f	# per process environment needs to know about processes
133environment resource_acct_mgmt		0
134environment routing			0
135environment shell			0
136environment skb				0
137environment storage_mgmt		0
138environment terminal			0
139environment threading			0
140environment tracing			0
141environment VMachine			0
142environment VMem			0
143group_comm binding			1	f	# group communication needs to use single bindings
144group_comm capability_mgmt		2	fb	# does it need to manipulate endpoints. May need to pass endpoints
145group_comm debugging			0
146group_comm driver			0
147group_comm device_man			0
148group_comm environment			0
149group_comm lock_service			2	f	# lock_service used to implement coordination, synchronisation, consensus? or vice versa?
150group_comm mem_alloc			0
151group_comm naming			0
152group_comm network_stack		0
153group_comm power_mgmt			0
154group_comm principals			0
155group_comm process_mgmt			0
156group_comm resource_acct_mgmt		0
157group_comm routing			2	i	# needs to send messages between members.  does it use routing directly? or through a general messaging layer?
158group_comm shell			0
159group_comm skb				1	fb	# needs to know what is available (eg cores in system, interconnects, etc.)
160group_comm storage_mgmt			0
161group_comm terminal			0
162group_comm threading			0
163group_comm tracing			0
164group_comm VMachine			0
165group_comm VMem				0
166lock_service binding			1	b	# needs to bind to other services and managers 
167lock_service capability_mgmt		0
168lock_service debugging			0
169lock_service driver			0
170lock_service device_man			0
171lock_service environment		0
172lock_service group_comm			2	i	# depends on how the lock primitives are implemented
173lock_service mem_alloc			0
174lock_service naming			1	b	# needs to communicate with other services and managers 
175lock_service network_stack		0
176lock_service power_mgmt			0
177lock_service principals			0
178lock_service process_mgmt		1	f	# needs to block process execution, needs to notify processes
179lock_service resource_acct_mgmt		0	
180lock_service routing			0
181lock_service shell			0
182lock_service skb			0
183lock_service storage_mgmt		0	
184lock_service terminal			0
185lock_service threading			1	f	# needs to block thread execution, needs to notify threads
186lock_service tracing			0
187lock_service VMachine			0
188lock_service VMem			0
189mem_alloc binding			1	b	# needs to bind to other services and managers 
190mem_alloc capability_mgmt		1	fb	# needs RAM caps to do cap management
191mem_alloc debugging			0
192mem_alloc driver			0
193mem_alloc device_man			0
194mem_alloc environment			0
195mem_alloc group_comm			0
196mem_alloc lock_service			0
197mem_alloc naming			0
198mem_alloc network_stack			0
199mem_alloc power_mgmt			0
200mem_alloc principals			0
201mem_alloc process_mgmt			0
202mem_alloc resource_acct_mgmt		2	f	# possibly needs to know about available (memory) resources at any given moment
203mem_alloc routing			0
204mem_alloc shell				0
205mem_alloc skb				2	fb	# needs to know what resources the system has
206mem_alloc storage_mgmt			0
207mem_alloc terminal			0
208mem_alloc threading			0
209mem_alloc tracing			0
210mem_alloc VMachine			0
211mem_alloc VMem				0
212naming binding				1	b	# needs to bind to other services and managers 
213naming capability_mgmt			0
214naming debugging			0
215naming driver				0
216naming device_man			0
217naming environment			0
218naming group_comm			2	i	# may use group communication for notification
219naming lock_service			0	
220naming mem_alloc			0
221naming network_stack			0
222naming power_mgmt			0
223naming principals			0
224naming process_mgmt			0
225naming resource_acct_mgmt		0
226naming routing				0
227naming shell				0
228naming skb				0
229naming storage_mgmt			0
230naming terminal				0
231naming threading			0	
232naming tracing				0
233naming VMachine				0
234naming VMem				0
235network_stack binding			1	b	# needs to bind to other services and managers 
236network_stack capability_mgmt		0
237network_stack debugging			0
238network_stack driver			1	f	# needs to access network drivers
239network_stack device_man		0
240network_stack environment		2	i	# may rely on environment settings
241network_stack group_comm		2	i	# may be implemented using group communication
242network_stack lock_service		2	i	# likely to be implemented with locking
243network_stack mem_alloc			0
244network_stack naming			1	b	# needs to find other services and managers
245network_stack power_mgmt		0
246network_stack principals		0
247network_stack process_mgmt		0
248network_stack resource_acct_mgmt	0
249network_stack routing			0
250network_stack shell			0
251network_stack skb			2	fb	# needs to know about network devices and other system info
252network_stack storage_mgmt		0
253network_stack terminal			0
254network_stack threading			0
255network_stack tracing			0
256network_stack VMachine			0
257network_stack VMem			2	i	# may need to manipulate mapping for zero-copy
258power_mgmt binding			1	b	# needs to bind to other services and managers 
259power_mgmt capability_mgmt		2	fb	# may need to manipulate caps to be able to modify power settings
260power_mgmt debugging			0
261power_mgmt driver			1	f	# needs to access drivers to change power states, etc.
262power_mgmt device_man			1	f	# needs to access drivers to change power states, etc.
263power_mgmt environment			0
264power_mgmt group_comm			2	i	# likely to be implemented using group communication
265power_mgmt lock_service			2	i	# likely to require locking
266power_mgmt mem_alloc			0
267power_mgmt naming			1	b	# needs to find other services and managers
268power_mgmt network_stack		0
269power_mgmt principals			0
270power_mgmt process_mgmt			0
271power_mgmt resource_acct_mgmt		2	f	# needs information about system resources to make power management decisions
272power_mgmt routing			0
273power_mgmt shell			0
274power_mgmt skb				1	fb	# needs to know what is available in the system, what should be monitored and controlled
275power_mgmt storage_mgmt			0
276power_mgmt terminal			0
277power_mgmt threading			0
278power_mgmt tracing			0
279power_mgmt VMachine			0
280power_mgmt VMem				0
281principals binding			2	b	# needs to bind to other services and managers 
282principals capability_mgmt		1	fb	# access control based on capabilities
283principals debugging			0
284principals driver			0
285principals device_man			0
286principals environment			0
287principals group_comm			0
288principals lock_service			0
289principals mem_alloc			0
290principals naming			2	b	# needs to find other services and managers
291principals network_stack		0
292principals power_mgmt			0
293principals process_mgmt			0
294principals resource_acct_mgmt		0
295principals routing			0
296principals shell			0
297principals skb				0
298principals storage_mgmt			0
299principals terminal			0
300principals threading			0
301principals tracing			0
302principals VMachine			0
303principals VMem				0
304process_mgmt binding			1	b	# needs to bind to other services and managers 
305process_mgmt capability_mgmt		1	fb	# needs to manipulate processes cspace (setup, teardown, etc.)
306process_mgmt debugging			0
307process_mgmt driver			0
308process_mgmt device_man			0
309process_mgmt environment		0
310process_mgmt group_comm			2	i	# likely to use group comm to contact dispatchers that make up a domain)
311process_mgmt lock_service		0
312process_mgmt mem_alloc			0
313process_mgmt naming			1	b	# needs to find other services and managers
314process_mgmt network_stack		0
315process_mgmt power_mgmt			0
316process_mgmt principals			1	f	# needs to know what permissions to give process (and thus what caps to give it)
317process_mgmt resource_acct_mgmt		1	f	# needs to account process's usage
318process_mgmt routing			0
319process_mgmt shell			0
320process_mgmt skb			0
321process_mgmt storage_mgmt		0
322process_mgmt terminal			0
323process_mgmt threading			1	f	# manage threads as part of process management
324process_mgmt tracing			0
325process_mgmt VMachine			0
326process_mgmt VMem			1	f	# needs to set up a process's address space
327resource_acct_mgmt binding		2	b	# needs to bind to other services and managers 
328resource_acct_mgmt capability_mgmt	1	fb	# needs to manipulate caps for resource management
329resource_acct_mgmt debugging		0
330resource_acct_mgmt driver		1	f	# needs to find out about and manage device usage from drivers and device managers
331resource_acct_mgmt device_man		1	f	# needs to find out about and manage device usage from drivers and device managers
332resource_acct_mgmt environment		0
333resource_acct_mgmt group_comm		2	i	# likely to use group communication
334resource_acct_mgmt lock_service		2	i	# likely to use locking/synchronisation
335resource_acct_mgmt mem_alloc		0
336resource_acct_mgmt naming		1	b	# needs to find other services and managers
337resource_acct_mgmt network_stack	0
338resource_acct_mgmt power_mgmt		1	f	# needs to account and manage power usage (power is also a type of resource to be managed)
339resource_acct_mgmt principals		0
340resource_acct_mgmt process_mgmt		1	f	# account and manage processes
341resource_acct_mgmt routing		0
342resource_acct_mgmt shell		0
343resource_acct_mgmt skb			1	fb	# needs to know what resources there are to manage
344resource_acct_mgmt storage_mgmt		2	f	# things like disk space management, quota management, etc.
345resource_acct_mgmt terminal		0
346resource_acct_mgmt threading		0
347resource_acct_mgmt tracing		0		# might use tracing service to get data
348resource_acct_mgmt VMachine		0
349resource_acct_mgmt VMem			0
350routing binding	   			1	f	# will need to use point-to-point bindings to implement multi-hop routing
351routing capability_mgmt			1	fb	# will need to create new endpoints?
352routing debugging			0
353routing driver				0
354routing device_man			0
355routing environment			0
356routing group_comm			2	i	# likely to use group communication to do routing
357routing lock_service			2	i 	# likely to use locking/synchronisation
358routing mem_alloc			0
359routing naming				2	b	# needs to find other services and managers, also for point-to-point links
360routing network_stack			0
361routing power_mgmt			0
362routing principals			0
363routing process_mgmt			0
364routing resource_acct_mgmt		0
365routing shell				0
366routing skb				2	fb	# needs to know what cores and interconnects there are to do routing
367routing storage_mgmt			0
368routing terminal			0
369routing threading			0
370routing tracing				0
371routing VMachine			0
372routing VMem				0
373shell binding				1	b	# needs to bind to other services and managers 
374shell capability_mgmt			0
375shell debugging				0
376shell driver				0
377shell device_man				0
378shell environment			1	f	# environment affects shell's behaviour
379shell group_comm			0
380shell lock_service			0
381shell mem_alloc				0
382shell naming				1	b	# needs to find other services and managers
383shell network_stack			0
384shell power_mgmt			0
385shell principals			1	f	# needs to determine authorisation, permissions, access control
386shell process_mgmt			1	f	# needs to start, stop, suspend, etc. processes
387shell resource_acct_mgmt		0
388shell routing				0
389shell skb				0
390shell storage_mgmt			1	f	# needs to access program files
391shell terminal				1	f	# I/O through terminal
392shell threading				1	f	# needs to manage thread execution (start, stop, suspend)
393shell tracing				0
394shell VMachine				0
395shell VMem				0
396skb binding				1      b	# needs to listen for connections
397skb capability_mgmt			0
398skb debugging				0
399skb driver				0
400skb device_man				0
401skb environment				0
402skb group_comm				0
403skb lock_service			0
404skb mem_alloc				0
405skb naming				1	b	# needs to register
406skb network_stack			0
407skb power_mgmt				0
408skb principals				0
409skb process_mgmt			0
410skb resource_acct_mgmt			0
411skb routing				0
412skb shell				0
413skb storage_mgmt			1	i	# needs to read pl files and store DB
414skb terminal				0
415skb threading				0
416skb tracing				0
417skb VMachine				0
418skb VMem				0
419storage_mgmt binding			1	b	# needs to bind to other services and managers 
420storage_mgmt capability_mgmt		1	fb	# uses capabilities for access control
421storage_mgmt debugging			0
422storage_mgmt driver			1	f	# needs to access disk/storage devices
423storage_mgmt device_man			0
424storage_mgmt environment		0
425storage_mgmt group_comm			2	i	# likely to use group communication
426storage_mgmt lock_service		2	i	# likely to use locking
427storage_mgmt mem_alloc				0
428storage_mgmt naming			1	b	# needs to find other services and managers
429storage_mgmt network_stack		0
430storage_mgmt power_mgmt			0
431storage_mgmt principals			2	f	# needs to do access control
432storage_mgmt process_mgmt		0
433storage_mgmt resource_acct_mgmt		0
434storage_mgmt routing			0
435storage_mgmt shell			0
436storage_mgmt skb			2	fb	# to find out what devices are available?
437storage_mgmt terminal			0
438storage_mgmt threading			0
439storage_mgmt tracing			0
440storage_mgmt VMachine			0
441storage_mgmt VMem			1	f	# mmaped files, zero copy, etc.
442terminal binding			1	b	# needs to bind to other services and managers 
443terminal capability_mgmt		2	i	# possibly for framebuffer or mapping output buffers?
444terminal debugging			0
445terminal driver				1	f	# needs to access input an output devices
446terminal device_man			0
447terminal environment			0
448terminal group_comm			0
449terminal lock_service			2	i	 # likely to use locking, synchronisation
450terminal mem_alloc			0
451terminal naming				1	b	# needs to find other services and managers
452terminal network_stack			0
453terminal power_mgmt			0
454terminal principals			0
455terminal process_mgmt			0
456terminal resource_acct_mgmt		0
457terminal routing			0
458terminal shell				0
459terminal skb				2	fb	# needs to find out what devices are available
460terminal storage_mgmt			0
461terminal threading			0
462terminal tracing			0
463terminal VMachine			0
464terminal VMem				2	i	# possibly for framebuffer or mapping output buffers?
465threading binding			2	b	# needs to bind to other services and managers 
466threading capability_mgmt		1	fb	# needs to manipulate access to thread local storage, stacks, etc.
467threading debugging			0
468threading driver			0
469threading device_man			0
470threading environment			0
471threading group_comm			0
472threading lock_service			2	f	# needs to provide thread specific synch 
473threading mem_alloc			0	
474threading naming			2	b	# needs to find other services and managers
475threading network_stack			0
476threading power_mgmt			0
477threading principals			0
478threading process_mgmt			1	f	# threads exist in the context of a process/domain
479threading resource_acct_mgmt		0
480threading routing			0
481threading shell				0
482threading skb				0
483threading storage_mgmt			0
484threading terminal			0
485threading tracing			0
486threading VMachine			0
487threading VMem				1	f	# manage memory accessible by a thread
488# not sure how the tracing works - it's potentially dependent on everything and vice versa?
489tracing binding				1   	b     # needs to listen for connectiosn	      
490tracing capability_mgmt			0
491tracing debugging			0
492tracing driver				0
493tracing device_man			0
494tracing environment			0
495tracing group_comm			0
496tracing lock_service			0
497tracing mem_alloc			0	
498tracing naming				1	b	# needs to register	
499tracing network_stack			0
500tracing power_mgmt			0
501tracing principals			0
502tracing process_mgmt			0
503tracing resource_acct_mgmt		0
504tracing routing				0
505tracing shell				0
506tracing skb				0
507tracing storage_mgmt			0
508tracing terminal			0
509tracing threading			0
510tracing VMachine			0
511tracing VMem				0
512# not sure about the VMM
513VMachine binding			1	b	# needs to use other services
514VMachine capability_mgmt		1	fb
515VMachine debugging			0
516VMachine driver				1	f
517VMachine device_man			1	f
518VMachine environment			0
519VMachine group_comm			0
520VMachine lock_service			2	i
521VMachine mem_alloc			1	f	# needs to deal with RAm and device memory
522VMachine naming				1	b	# needs to find other services
523VMachine network_stack			2	i	# may use net stack to virtualise network traffic
524VMachine power_mgmt			2	i	# may do power management
525VMachine principals			0
526VMachine process_mgmt			1	f
527VMachine resource_acct_mgmt		0
528VMachine routing			0
529VMachine shell				0
530VMachine skb				2	fb	# may need to find avaialbel resources
531VMachine storage_mgmt			2	i	# may use FS to virtualise storage access
532VMachine terminal			0
533VMachine threading			0
534VMachine tracing			0
535VMachine VMem				1	f	# needs to manage virtual mem mappings
536VMem binding				1	b	# needs to bind to other services and managers 
537VMem capability_mgmt			1	fb	# needs to manipulate caps 
538VMem debugging				0
539VMem driver				1	f	# for paging
540VMem device_man				0
541VMem environment			0
542VMem group_comm				2	i	# likely to be implemented using group comm
543VMem lock_service			2	i	# likely to use locking/sync
544VMem mem_alloc				1	f	# needs RAM caps to do mappings etc.
545VMem naming				1	b	# needs to find other services and managers
546VMem network_stack			0
547VMem power_mgmt				0
548VMem principals				0
549VMem process_mgmt			0
550VMem resource_acct_mgmt			0
551VMem routing				0
552VMem shell				0
553VMem skb				1	fb	# needs to know what memory is available
554VMem storage_mgmt			1	f	# for paging
555VMem terminal				0
556VMem threading				0
557VMem tracing				0
558VMem VMachine				0
559