Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

602 lines
20 KiB

  1. <HTML>
  2. <HEAD>
  3. <TITLE>
  4. URT Configuration System Requirements
  5. </TITLE>
  6. </HEAD>
  7. <BODY LANG=EN-US LINK=blue VLINK=maroon>
  8. <a name="top"></a>
  9. <H1>URT Configuration System Requirements</H1>
  10. <em>
  11. <b>Specification</b><br>
  12. Universal Runtime<br>
  13. <font color=red>Microsoft Confidential</font>
  14. </em>
  15. <p>
  16. <TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%">
  17. <tr>
  18. <td>Author</td>
  19. <td><a href="mailto:vanvan">Van Van</a></td>
  20. </tr>
  21. <tr>
  22. <td>Area</td>
  23. <td>Configuration System</td>
  24. </tr>
  25. <tr>
  26. <td>SubArea</td>
  27. <td>Requirements</td>
  28. </tr>
  29. <tr>
  30. <td>Program Management</td>
  31. <td><a href="mailto:markush">Markus Horstmann</a></td>
  32. </tr>
  33. <tr>
  34. <td>Development</td>
  35. <td><a href="mailto:rcraig">Robert Craig</a></td>
  36. </tr>
  37. <tr>
  38. <td>Test</td>
  39. <td><a href="mailto:mikefan">Michael Fanning</a></td>
  40. </tr>
  41. <tr>
  42. <td>Reviewers</td>
  43. <td>
  44. <a href="mailto:boydm">Boyd Multerer</a>;
  45. <a href="mailto:rcraig">Robert Craig</a>;
  46. <a href="mailto:billdev">Bill Devlin</a>
  47. </td>
  48. </tr>
  49. <tr>
  50. <td>Current Version</td>
  51. <td>
  52. 0.3 : 9/12/99 : added two (2) runtime requirements per StevenPr - VanVan<br>
  53. </td>
  54. </tr>
  55. <tr>
  56. <td>Version History</td>
  57. <td>
  58. 0.2 : 9/2/99 : added general requirements - VanVan<br>
  59. 0.1 : 8/17/99 : file created - VanVan<br>
  60. </td>
  61. </tr>
  62. <tr>
  63. <td>Status</td>
  64. <td><b>In Progress</b></td>
  65. </tr>
  66. </TABLE>
  67. <p>
  68. <hr size=2 width="100%" align=center>
  69. <a name="TOC"></a>
  70. <!-- TABLE OF CONTENTS -->
  71. <TABLE BORDER=0 CELLPADDING=0 WIDTH="100%">
  72. <tr>
  73. <td><a href="#Overview">Overview</a></td>
  74. <td></td>
  75. </tr>
  76. <tr>
  77. <td><a href="#Justification">Justification</a></td>
  78. <td></td>
  79. </tr>
  80. <tr>
  81. <td><a href="#General Requirements">General Requirements</a></td>
  82. <td></td>
  83. </tr>
  84. <tr>
  85. <td>Groups</td>
  86. <td>
  87. <a href="#AppSrv">Application Server</a><br>
  88. <a href="#Ducttape">Duct Tape</a><br>
  89. <a href="#Runtime">Runtime</a><br>
  90. <a href="#XSP">XSP</a><br>
  91. </tr>
  92. </TABLE>
  93. <hr size=2 width="100%" align=center>
  94. <p>
  95. <h2><a name="Overview">Overview</a></h2>
  96. <p>
  97. As we move forward in planning for and designing the Configuration
  98. System for URT 1.0, it is critical that we understand who our customers
  99. are and what their individual requirements are. This document will
  100. serve as a repository for the individual requirements from each team
  101. and will be updated as requirements are gathered and consolidated. We
  102. will be discussing the issues with each requirement and prioritizing
  103. them as well. <em>Please note that this document is specifically
  104. implementation independent. Implementation details will be covered in
  105. the design specification.</em>
  106. <p>
  107. This document will eventually be merged with the final design
  108. specification when that becomes available.
  109. <p>
  110. <hr size=2 width="100%" align=center>
  111. <p>
  112. <h2><a name="Justification">Justification</a></h2>
  113. <p>
  114. Without a list of requirements in hand, it is difficult, if not
  115. impossible to build a system that will satisfy every groups needs. The
  116. goal of the URT Configuration Team is to provide a unified Configuration
  117. System for the entire URT. In order to do so, our first step is to
  118. collect and reflect on all the requirements as we understand them. If
  119. you find any information here to be inaccurate or incorrect, please feel
  120. free to contact <a href="mailto:vanvan">Van Van</a>.
  121. <p>
  122. <hr size=2 width="100%" align=center>
  123. <p>
  124. <h2><a name="General Requirements">General Requirements</a></h2>
  125. The following requirements were accepted as a group as the general
  126. requirements of the URT Configuration System. This is (again)
  127. irrespective of implementation and group.
  128. <ul>
  129. <li>There is a need for generic (pre-defined) objects in the config
  130. system</li>
  131. <li>There is also a need for outputting strongly typed (custom) objects
  132. from the configuration system</li>
  133. <li>There is a need for generic (base) config factories that performs
  134. common merging logic (something that covers the 80% - 90% case)</li>
  135. <li>There is a need for a layer (layered approach) on top of the base
  136. config factories which enable third parties to hook in their custom
  137. merge logic</li>
  138. </ul>
  139. <p>
  140. The following are more concrete requirements by the URT as a whole in no
  141. particular order:
  142. <ul>
  143. <li>XML File based - Specifically for the HTTP Host</li>
  144. <li>The Stores return data in a consistent format regardless of storage
  145. container</li>
  146. <li>The system supports directives</li>
  147. <li>Directives are expressed in the form of XML</li>
  148. <li>The system supports hierachical containment and inheritence</li>
  149. <li>Configuration Consumers recieve objects</li>
  150. <li>System is Extensible in these fashions
  151. <ul>
  152. <li>Stores</li>
  153. <li>Config Factories/Config Property based merging rules</li>
  154. <li>Application Hosts</li>
  155. </ul>
  156. </li>
  157. <li>Runs on all URT Platforms
  158. <ul>
  159. <li>Win2K (Server and Workstation)</li>
  160. <li>NT4 (Server and Workstation)</li>
  161. <li>Win9x (exact flavors to be determined)</li>
  162. <li>Ultimately WinCE - Not for prerelease</li>
  163. </ul>
  164. </li>
  165. <li>Supports all known application hosts
  166. <ul>
  167. <li>HTTP</li>
  168. <li>EXE</li>
  169. <li>IE Hosted Apps</li>
  170. <li>VBS - not in pre-release</li>
  171. </ul>
  172. </li>
  173. <li>Supports secure store of secrets</li>
  174. <li>Allows securing of configuration system</li>
  175. <li>Supports change notification of configuration files</li>
  176. <li>Object Caching in the configuration system</li>
  177. </ul>
  178. <p>
  179. <hr size=2 width="100%" align=center>
  180. <p>
  181. <h2>Individual Group Requirements</h2>
  182. <p>
  183. The following are (listed by the individual groups) the list of
  184. requirements as we understand them so far. You can go to specific areas
  185. of this document by using the <a href="#TOC">Table Of Contents</a> at
  186. the beginning of this document.
  187. <p>
  188. <hr size=2 width="100%" align=center>
  189. <p>
  190. <h3><a name="AppSrv">Application Server (Administration/UI)</a></h3>
  191. <p>
  192. The following list of Application Server requirements stem from an
  193. administration/management/UI standpoint.
  194. <ul>
  195. <li>The configuration system must be able to be queried along several
  196. different axes and return sets of data/applications.</li>
  197. <li>The configuration system must be able to service requests for
  198. machine-wide data and must be designed to handle administration of
  199. heterogeneous clusters.</li>
  200. <li>There must be a single point of access to the configuration data
  201. that the Administration toolset can access. This point must also be
  202. able to query and return application data as well as system data.</li>
  203. <li>Administration must be doable when any particular application's
  204. process pool is offline or disabled.</li>
  205. <li>The administration tools must be able to build models of the
  206. structure of the system from metadata alone. This is the same reason
  207. reflection works the way it does in the runtime. Very meta.</li>
  208. <li>Changes to a set of properties returned from a query to the config
  209. system must be accepted by the config system and applied back out to
  210. the original data sources. If there is inheritance and directives
  211. roll-up, then this must be accounted for.</li>
  212. <li>Changes to a set of properties returned from a query or multiple
  213. queries must be written out in the scope of a transaction. It is totally
  214. bad if we don't do this and we don't have any excuses as it is
  215. old technology and it works.</li>
  216. <li>It must be understandable. The admin tools can probably deal with a
  217. limited amount of inheritance or roll-up, but anything more is going
  218. to be impossible to deal with. If this thing works but requires a
  219. master's degree to operate, we will not succeed.</li>
  220. <li>
  221. <b>Locking Mechanism</b>: In any distributed environment, the chance
  222. of two entities modifying configuration information is non-trivial.
  223. There must be mechanisms in place that prevents, or at least, makes it
  224. difficult to "overwrite" other users settings without knowing it. The
  225. actual locking mechanism, pessimistic vs. optimistic, can be discussed
  226. at a later time.
  227. </li>
  228. </ul>
  229. <p>
  230. <hr size=2 width="100%" align=center>
  231. <p>
  232. <h3><a name="Ducttape">Duct Tape</a></h3>
  233. Ducttape's requirements are similiar to those from other teams. They
  234. are listed here in no particular order:
  235. <ul>
  236. <li>Text based (preferably XML)</li>
  237. <li>Support schema as defined by the Ducttape team (spec to be found at
  238. <a href="http://ericdew2k/specs/configstoredata.htm">http://ericdew2k/specs/configstoredata.htm</a>)
  239. such as APPPOOL, WEB SITE, and APPLICATION
  240. </li>
  241. <li>There shouldn't be any file size limitation on the config data.
  242. Performance may be a trade off</li>
  243. <li>No GUIDs or like in object definition. Human readability and
  244. editability is key</li>
  245. </ul>
  246. <p>
  247. <hr size=2 width="100%" align=center>
  248. <p>
  249. <h3><a name="Runtime">Runtime (aka Lightning)</a></h3>
  250. <p>
  251. The following is the list of requirements by the Runtime team in no
  252. specific order:
  253. <ul>
  254. <li>
  255. Efficient, production implementation of APIs/infrastructure in URT 1.0
  256. release timeframe. Pre-release quality in November, sufficient to
  257. allow the runtime to retain its beta quality goals.
  258. <br>
  259. <font color=red><em><b>
  260. ISSUE: What are these performance/quality goals?
  261. </b></em></font>
  262. </li>
  263. <li>
  264. Publish perf goals, measure against perf with each milestone.
  265. </li>
  266. <li>
  267. Production UI in URT 1.0 release, more than just XML/text file
  268. edit. Alpha-quality, but fully-functional UI, in November.
  269. </li>
  270. <li>Get in URT integration build starting immediately.</li>
  271. <li>
  272. Publish feature plan / schedule for each milestone, including being
  273. very clear what dependencies you have, e.g., xml parser, platforms,
  274. other services.
  275. </li>
  276. <li>
  277. Equivalent administration feature set on client and server with
  278. equal emphasis on both.
  279. </li>
  280. <li>
  281. Support for runtime administration schema including assembly and
  282. assembly locale, processor, OS, ref, ref locale, ref processor, ref
  283. OS; and file, comtype, manifest resource, and execution location.<br>
  284. <font color=red><em><b>
  285. ISSUE: Are there any file caching requirements?
  286. </b></em></font>
  287. </li>
  288. <li>
  289. Must support various change notification scenarios. In some cases,
  290. running code wants to be immediately notified when a config file
  291. changes. In other scenarios, the running code wants to take a
  292. snapshot of the config data at startup and be unaffected by changes.
  293. For the runtime in particular, these snapshots must be maintained per
  294. app domain.<br>
  295. <font color=red><em><b>
  296. ISSUE: Are these the only two scenarios or are there more?
  297. </b></em></font>
  298. </li>
  299. <li>
  300. Run on NT4, W2K, Win9x.<br>
  301. <font color=red><em><b>
  302. ISSUE: What about alpha, terminal server, and WinCE? Dates?
  303. </b></em></font>
  304. </li>
  305. <li>
  306. Must be consistent config model for:
  307. <ul>
  308. <li>Installed client executable</li>
  309. <li>Code download through a browser</li>
  310. <li>Web apps (XSP application)</li>
  311. </ul>
  312. </li>
  313. <li>
  314. Support configuration retrieval from XML and Secure store
  315. </li>
  316. <li>
  317. Security requirements for the runtime
  318. <ul>
  319. <li>
  320. Machine security policy based on groups with associated
  321. permissions to be granted; groups include named publishers for
  322. signed code (e.g. "Microsoft Corp" for AuthentiCode signature), web
  323. site origin of code (e.g. "www.microsoft.com"), zone of origin of
  324. code (e.g. Internet, intranet, etc.), and strong name
  325. (e.g. cryptographically unspoofable namespace for code)
  326. </li>
  327. <li>
  328. Permissions associated with groups will be sets of permissions
  329. defined by name, either pre-defined defaults we supply or XML
  330. description of permissions in a file that may be authored/modified
  331. by admin/users.
  332. </li>
  333. <li>
  334. Need a flag to turn on/off security globally (probably a handful of
  335. flags for "debugging" purposes)
  336. </li>
  337. <li>
  338. Configuration based on user and machine. For example, in a large
  339. enterprise all clients will have some kind of basic policy -
  340. e.g. don't run unmanaged code downloads from the outside, etc. -
  341. that apply to all users and should be replicated to all client
  342. machines; however, developers within the enterprise, say, may be
  343. allowed to run unmanaged code, yet perhaps "normal workers" would
  344. only be allowed to run managed code. That is - the security policy
  345. in effect on a client is different depending on who logs in (dev or
  346. worker); the machine policy is universal but depending on the user
  347. there may be further restrictions or possibly overrides (whatever
  348. merge logic is) applicable. In an enterprise, admin needs to be
  349. able to "lock down" machine settings against tampering by local
  350. user. Rely on OS user login.
  351. </li>
  352. <li>
  353. Hierarchical restrictions for site hosting. An ISP has a box they
  354. host hundreds of independent sites - a.com b.com and c.com all run
  355. on one NT box unbeknownst to each other. For a b and c to admin
  356. their "very own" virtual machines they login separately and would
  357. want security policy that keeps their code from interacting. So the
  358. ISP "real machine admin" is top boss and hands out pieces of the
  359. system to a b and c; each site in turn has admin rights on their
  360. "virtual machine" within their various areas. Obviously, admin b
  361. can only config their own stuff and further can only give out
  362. security permissions within the constraints the ISP admin has set.
  363. For example, b.com may have all of C:\B folder but may want to
  364. further restrict file access to C:\B\TEMP for certain code, yet we
  365. can't allow b.com admin to hand out C:\C folder access (that's
  366. c.com's area of course).
  367. <br>
  368. Model should be general but implementation may limit hierarchy to
  369. depth of just two levels to reduce complexity and testing effort
  370. (two levels supports the ISP hosting of sites nicely, or in an
  371. enterprise the machine admin - ITG here - versus site owners like
  372. various departments within the org).
  373. </li>
  374. <li>
  375. The store itself must also be secure. All security/policy and
  376. probably just about all other config settings will need to be
  377. secure, esp. in the ISP hosting example above we don't want a.com
  378. being able to even see much less alter any of b.com's settings.
  379. </li>
  380. <li>
  381. Provide for some sort of tamper-detection. The next level would be
  382. tamper-detection plus obscuring anyone but the admin from seeing
  383. config info; next level would be preventing any read or write access
  384. (we would like that higer level, but could live with the minimum for
  385. November I think) Protection will ultimately be as good as base OS
  386. security protection can support, which will vary by platform.
  387. </li>
  388. <li>
  389. Only authorized admin can change config.
  390. <br>
  391. <font color=red><em><b>
  392. ISSUE: How do we define who can be an admin? Do we need access
  393. roles for config/policy?
  394. </b></em></font>
  395. </li>
  396. </ul>
  397. </li>
  398. <li>
  399. The configuration store must be able to be backed-up and restored
  400. given the appropriate permissions.
  401. <br>
  402. <font color=red><em><b>
  403. ISSUE: How do you backup a secure config?
  404. </b></em></font>
  405. </li>
  406. <li>
  407. By the third week in August, the runtime needs the following:
  408. <ul>
  409. <li>Be ported to Win9x</li>
  410. <li>Handle stores provided by the runtime (XML file based on the file
  411. name of the application)</li>
  412. <li>Have a default validation/merge layer that can be used by the
  413. runtime</li>
  414. <li>Provide API's for retrieving the merged configuration<br>
  415. <font color=red><em><b>
  416. ISSUE: Are the interfaces managed, native, or both?<br>
  417. ISSUE: What are the merge scenarios?
  418. </b></em></font>
  419. </li>
  420. <li>Minimal impact when there are no relevant stores</li>
  421. <li>Support a download. This is basically the same as the shell. The
  422. IE host will be responsible for making the store available to the
  423. configuration system.</li>
  424. </ul>
  425. </li>
  426. <li>
  427. Must support the storage and retreival of user defined objects. Both
  428. our security and context features support the capability for customers
  429. to build their own configurable objects. For example, I could define
  430. a custom permission that controls access to a dedicated hardware
  431. device.
  432. </li>
  433. </ul>
  434. <hr size=2 width="100%" align=center>
  435. <p>
  436. <h3><a name="XSP">XSP</a></h3>
  437. <p>
  438. These are the requirements of XSP in no particular order:
  439. <ul>
  440. <li>
  441. Configuration directives are associated with nodes in a
  442. hierarchy. Nodes in the hierarchy represent machines, sites,
  443. applications, directories, files, set of directories matching a regex
  444. and sets of files matching a regex.
  445. </li>
  446. <li>
  447. The configuration for a child node is computed by merging the parent
  448. node's configuration and the child node's configuration
  449. directives. The directives can take any form. Examples include simple
  450. name-value pairs, imperative commands (add/remove script mapping) or
  451. scripts (url rewriting). The merge semantics are also open ended.
  452. Examples include union and intersection.
  453. <br>
  454. <font color=red><em><b>
  455. ISSUE: Can you specify the child's config info at the parent?
  456. </b></em></font>
  457. </li>
  458. <li>
  459. Store configuration directives in human readable text files. This
  460. allows the website developer to use the same set of tools for website
  461. content and configuration files. These tools include Notepad, XCOPY,
  462. FTP, source code control systems, diff and so on. Note that GUIDs and
  463. excessive use of IDREFs fall outside the realm of human readability.
  464. </li>
  465. <li>
  466. Optimize data access for multiple reads in the same application
  467. domain.
  468. </li>
  469. <li>
  470. Cache data in memory using types determined by the developer. This
  471. helps with performance and it helps to discourage the creation of
  472. custom configuration caches.
  473. </li>
  474. <li>
  475. The cost of reading and parsing one or more text files when loading
  476. configuration information for the first time in an application domain
  477. is acceptable. The cost is small compared to the cost of serving out a
  478. handful of dynamic pages.
  479. </li>
  480. <li>
  481. Use the same update semantics for content and configuration
  482. information. If content changes are picked up immediately after a file
  483. change, then configuration changes should be picked up immediately
  484. after a file change. Although transacted update of configuration is
  485. desirable, it only makes sense if all aspects of an application or web
  486. site are updated in the same transaction.
  487. </li>
  488. <li>
  489. Support the edit-save-test cycle that is so popular with ASP
  490. developers. In this mode of operation, the developer makes changes a
  491. file in an editor, saves the changes to disk and refreshes the browser
  492. to see the changes. Any errors are reported back to browser through
  493. the HTTP response.
  494. </li>
  495. <li>
  496. Handle ISP scenarios where the site administrator's only access to
  497. the machine is through FTP. The configuration does not require a
  498. "kick".
  499. </li>
  500. <li>
  501. Handle configuration files dribbling in through FTP over a slow
  502. link. Cooking the configuration information on every change as they
  503. occur might have undesirable performance characteristics.
  504. </li>
  505. <li>
  506. Allow application and component developers to define new types of
  507. configuration information and merge semantics.
  508. </li>
  509. <li>
  510. Do not require site-wide administrative control when extending the
  511. configuration system.
  512. </li>
  513. <li>
  514. Build XSP using the public extensibility mechanism to ensure that the
  515. extensibility model is complete and robust.
  516. </li>
  517. <li>
  518. Minimize the number of data access APIs the developer needs to learn
  519. to extend the configuration system. For one reason or another,
  520. developers will probably learn XML-DOM and XDO. All configuration data
  521. manipulation should be through one of these APIs or through object
  522. access.
  523. </li>
  524. <li>
  525. Minimize the number of data representations that the developer must
  526. understand to extend the configuration system. At a minimum, the
  527. developer must understand two representations of the data: the in
  528. memory representation and the configuration file representation. If
  529. any intermediate data representations are used, then they should be
  530. hidden from the user.
  531. </li>
  532. <li>
  533. Execute application or component supplied configuration extensions in
  534. the host application's application domain. This ensures that the
  535. configuration extension is loaded from the correct location and that
  536. the extension runs in the correct security context.
  537. </li>
  538. <li>
  539. Fire change notification events. This allows XSP, components and
  540. applications to remove dependent information from caches.
  541. </li>
  542. <li>
  543. Use XSP's file change notification system. We don't need more than one
  544. file change notification system running in the process.
  545. <br>
  546. <font color=red><em><b>
  547. ISSUE: Need more investigation in the XSP file change notification
  548. system.
  549. </b></em></font>
  550. </li>
  551. </ul>
  552. <hr size=2 width="100%" align=center>
  553. </BODY>
  554. </HTML>