{"action":"created","comment":{"url":"https://api.github.com/repos/appc/spec/pulls/comments/25402550","id":25402550,"diff_hunk":"@@ -117,34 +120,62 @@ The dependencies are applied in order and each image dependency can overwrite fi\n Execution details specified in image dependencies are ignored.\n An optional *path whitelist* can be provided, in which case all non-specified files from all dependencies will be omitted in the final, assembled rootfs.\n \n-Image Format TODO\n+## App Container Executor\n \n-* Define the garbage collection lifecycle of the container filesystem including:\n+The **App Container Executor** defines the process by which applications contained in ACIs are executed.\n+There are two \"perspectives\" in this process.\n+The \"*executor*\" perspective consists of the steps that the App Container Executor (ACE) must take to set up the environment for the pod and applications.\n+The \"*app*\" perspective is how the app processes inside the pod see the environment.\n+\n+## Pods\n+\n+The deployable, executable unit in the App Container specification is the **pod**.\n+A **pod** is a list of apps that should be launched together inside a shared context.\n+The shared context is defined as the conjunction of the following Linux namespaces (or equivalents on other operating systems):\n+- PID namespace\n+- network namespace\n+- mount namespace\n+- IPC namespace\n+- UTS namespace\n+The context may also consist of one or more isolators.\n+\n+Each app in a pod will start chrooted into its own unique read-write rootfs before execution.","path":"SPEC.md","position":121,"original_position":121,"commit_id":"54563935167937134b4e62bfe2dc3a24e173ba5d","original_commit_id":"54563935167937134b4e62bfe2dc3a24e173ba5d","user":{"login":"philips","id":33544,"avatar_url":"https://avatars.githubusercontent.com/u/33544?v=3","gravatar_id":"","url":"https://api.github.com/users/philips","html_url":"https://github.com/philips","followers_url":"https://api.github.com/users/philips/followers","following_url":"https://api.github.com/users/philips/following{/other_user}","gists_url":"https://api.github.com/users/philips/gists{/gist_id}","starred_url":"https://api.github.com/users/philips/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/philips/subscriptions","organizations_url":"https://api.github.com/users/philips/orgs","repos_url":"https://api.github.com/users/philips/repos","events_url":"https://api.github.com/users/philips/events{/privacy}","received_events_url":"https://api.github.com/users/philips/received_events","type":"User","site_admin":false},"body":"I think these are generic enough terms that I am OK with it.","created_at":"2015-02-26T03:32:23Z","updated_at":"2015-02-26T03:32:23Z","html_url":"https://github.com/appc/spec/pull/207#discussion_r25402550","pull_request_url":"https://api.github.com/repos/appc/spec/pulls/207","_links":{"self":{"href":"https://api.github.com/repos/appc/spec/pulls/comments/25402550"},"html":{"href":"https://github.com/appc/spec/pull/207#discussion_r25402550"},"pull_request":{"href":"https://api.github.com/repos/appc/spec/pulls/207"}}},"pull_request":{"url":"https://api.github.com/repos/appc/spec/pulls/207","id":29495532,"html_url":"https://github.com/appc/spec/pull/207","diff_url":"https://github.com/appc/spec/pull/207.diff","patch_url":"https://github.com/appc/spec/pull/207.patch","issue_url":"https://api.github.com/repos/appc/spec/issues/207","number":207,"state":"open","locked":false,"title":"spec: introduce Pods, remove CRMs","user":{"login":"jonboulle","id":2601015,"avatar_url":"https://avatars.githubusercontent.com/u/2601015?v=3","gravatar_id":"","url":"https://api.github.com/users/jonboulle","html_url":"https://github.com/jonboulle","followers_url":"https://api.github.com/users/jonboulle/followers","following_url":"https://api.github.com/users/jonboulle/following{/other_user}","gists_url":"https://api.github.com/users/jonboulle/gists{/gist_id}","starred_url":"https://api.github.com/users/jonboulle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jonboulle/subscriptions","organizations_url":"https://api.github.com/users/jonboulle/orgs","repos_url":"https://api.github.com/users/jonboulle/repos","events_url":"https://api.github.com/users/jonboulle/events{/privacy}","received_events_url":"https://api.github.com/users/jonboulle/received_events","type":"User","site_admin":false},"body":"Following on from #150, this is the next iteration at an attempt to introduce\nthe concept of pods.\n\nFollowing the most recent discussion on the topic, this patch attempts to\nsimplify things greatly by removing the ContainerRuntimeManifest entirely and\nsettling instead on a single PodManifest.\n\nTo achieve this, we give the PodManifest a dual purpose: it is both a\n_deployable template_ (which can be used to stamp out instances of pods) which\nbefore execution must be resolved into a final/reified version. The allowed\nreified versions are a _subset_ of the template versions; for example, app\nreferences in the reified version of a Pod Manifest MUST be deterministic and\ncontain image IDs (i.e. they cannot rely on labels and dependency matching).\n\nAn important distinction from the previous CRM model is that a reified \nPodManifest no longer _necessarily_ includes runtime information specific to\nthe executor (i.e., the UUID). It is hence possible that a fully reified pod\ncould be passed around as a deployable unit to different executors.\n\nThis patch also goes to some length to eliminate the (frustratingly ambiguous)\nword \"container\" from the spec, except for in qualified contexts (e.g. \"App\nContainer Image\").","created_at":"2015-02-18T01:51:59Z","updated_at":"2015-02-26T03:32:23Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0f54db9e78048b8b294dce00d6a583dfcc64d8f7","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/appc/spec/pulls/207/commits","review_comments_url":"https://api.github.com/repos/appc/spec/pulls/207/comments","review_comment_url":"https://api.github.com/repos/appc/spec/pulls/comments{/number}","comments_url":"https://api.github.com/repos/appc/spec/issues/207/comments","statuses_url":"https://api.github.com/repos/appc/spec/statuses/54563935167937134b4e62bfe2dc3a24e173ba5d","head":{"label":"jonboulle:pods_redux","ref":"pods_redux","sha":"54563935167937134b4e62bfe2dc3a24e173ba5d","user":{"login":"jonboulle","id":2601015,"avatar_url":"https://avatars.githubusercontent.com/u/2601015?v=3","gravatar_id":"","url":"https://api.github.com/users/jonboulle","html_url":"https://github.com/jonboulle","followers_url":"https://api.github.com/users/jonboulle/followers","following_url":"https://api.github.com/users/jonboulle/following{/other_user}","gists_url":"https://api.github.com/users/jonboulle/gists{/gist_id}","starred_url":"https://api.github.com/users/jonboulle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jonboulle/subscriptions","organizations_url":"https://api.github.com/users/jonboulle/orgs","repos_url":"https://api.github.com/users/jonboulle/repos","events_url":"https://api.github.com/users/jonboulle/events{/privacy}","received_events_url":"https://api.github.com/users/jonboulle/received_events","type":"User","site_admin":false},"repo":{"id":27783943,"name":"spec","full_name":"jonboulle/spec","owner":{"login":"jonboulle","id":2601015,"avatar_url":"https://avatars.githubusercontent.com/u/2601015?v=3","gravatar_id":"","url":"https://api.github.com/users/jonboulle","html_url":"https://github.com/jonboulle","followers_url":"https://api.github.com/users/jonboulle/followers","following_url":"https://api.github.com/users/jonboulle/following{/other_user}","gists_url":"https://api.github.com/users/jonboulle/gists{/gist_id}","starred_url":"https://api.github.com/users/jonboulle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jonboulle/subscriptions","organizations_url":"https://api.github.com/users/jonboulle/orgs","repos_url":"https://api.github.com/users/jonboulle/repos","events_url":"https://api.github.com/users/jonboulle/events{/privacy}","received_events_url":"https://api.github.com/users/jonboulle/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jonboulle/spec","description":"App Container Specification and Tooling","fork":true,"url":"https://api.github.com/repos/jonboulle/spec","forks_url":"https://api.github.com/repos/jonboulle/spec/forks","keys_url":"https://api.github.com/repos/jonboulle/spec/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jonboulle/spec/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jonboulle/spec/teams","hooks_url":"https://api.github.com/repos/jonboulle/spec/hooks","issue_events_url":"https://api.github.com/repos/jonboulle/spec/issues/events{/number}","events_url":"https://api.github.com/repos/jonboulle/spec/events","assignees_url":"https://api.github.com/repos/jonboulle/spec/assignees{/user}","branches_url":"https://api.github.com/repos/jonboulle/spec/branches{/branch}","tags_url":"https://api.github.com/repos/jonboulle/spec/tags","blobs_url":"https://api.github.com/repos/jonboulle/spec/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jonboulle/spec/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jonboulle/spec/git/refs{/sha}","trees_url":"https://api.github.com/repos/jonboulle/spec/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jonboulle/spec/statuses/{sha}","languages_url":"https://api.github.com/repos/jonboulle/spec/languages","stargazers_url":"https://api.github.com/repos/jonboulle/spec/stargazers","contributors_url":"https://api.github.com/repos/jonboulle/spec/contributors","subscribers_url":"https://api.github.com/repos/jonboulle/spec/subscribers","subscription_url":"https://api.github.com/repos/jonboulle/spec/subscription","commits_url":"https://api.github.com/repos/jonboulle/spec/commits{/sha}","git_commits_url":"https://api.github.com/repos/jonboulle/spec/git/commits{/sha}","comments_url":"https://api.github.com/repos/jonboulle/spec/comments{/number}","issue_comment_url":"https://api.github.com/repos/jonboulle/spec/issues/comments{/number}","contents_url":"https://api.github.com/repos/jonboulle/spec/contents/{+path}","compare_url":"https://api.github.com/repos/jonboulle/spec/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jonboulle/spec/merges","archive_url":"https://api.github.com/repos/jonboulle/spec/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jonboulle/spec/downloads","issues_url":"https://api.github.com/repos/jonboulle/spec/issues{/number}","pulls_url":"https://api.github.com/repos/jonboulle/spec/pulls{/number}","milestones_url":"https://api.github.com/repos/jonboulle/spec/milestones{/number}","notifications_url":"https://api.github.com/repos/jonboulle/spec/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jonboulle/spec/labels{/name}","releases_url":"https://api.github.com/repos/jonboulle/spec/releases{/id}","created_at":"2014-12-09T19:48:51Z","updated_at":"2015-02-06T20:49:10Z","pushed_at":"2015-02-23T00:49:39Z","git_url":"git://github.com/jonboulle/spec.git","ssh_url":"git@github.com:jonboulle/spec.git","clone_url":"https://github.com/jonboulle/spec.git","svn_url":"https://github.com/jonboulle/spec","homepage":null,"size":1069,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"appc:master","ref":"master","sha":"03131b10bacc3cd2886ffac3105061d0a1a7dd74","user":{"login":"appc","id":10080092,"avatar_url":"https://avatars.githubusercontent.com/u/10080092?v=3","gravatar_id":"","url":"https://api.github.com/users/appc","html_url":"https://github.com/appc","followers_url":"https://api.github.com/users/appc/followers","following_url":"https://api.github.com/users/appc/following{/other_user}","gists_url":"https://api.github.com/users/appc/gists{/gist_id}","starred_url":"https://api.github.com/users/appc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/appc/subscriptions","organizations_url":"https://api.github.com/users/appc/orgs","repos_url":"https://api.github.com/users/appc/repos","events_url":"https://api.github.com/users/appc/events{/privacy}","received_events_url":"https://api.github.com/users/appc/received_events","type":"Organization","site_admin":false},"repo":{"id":27782596,"name":"spec","full_name":"appc/spec","owner":{"login":"appc","id":10080092,"avatar_url":"https://avatars.githubusercontent.com/u/10080092?v=3","gravatar_id":"","url":"https://api.github.com/users/appc","html_url":"https://github.com/appc","followers_url":"https://api.github.com/users/appc/followers","following_url":"https://api.github.com/users/appc/following{/other_user}","gists_url":"https://api.github.com/users/appc/gists{/gist_id}","starred_url":"https://api.github.com/users/appc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/appc/subscriptions","organizations_url":"https://api.github.com/users/appc/orgs","repos_url":"https://api.github.com/users/appc/repos","events_url":"https://api.github.com/users/appc/events{/privacy}","received_events_url":"https://api.github.com/users/appc/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/appc/spec","description":"App Container Specification and Tooling","fork":false,"url":"https://api.github.com/repos/appc/spec","forks_url":"https://api.github.com/repos/appc/spec/forks","keys_url":"https://api.github.com/repos/appc/spec/keys{/key_id}","collaborators_url":"https://api.github.com/repos/appc/spec/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/appc/spec/teams","hooks_url":"https://api.github.com/repos/appc/spec/hooks","issue_events_url":"https://api.github.com/repos/appc/spec/issues/events{/number}","events_url":"https://api.github.com/repos/appc/spec/events","assignees_url":"https://api.github.com/repos/appc/spec/assignees{/user}","branches_url":"https://api.github.com/repos/appc/spec/branches{/branch}","tags_url":"https://api.github.com/repos/appc/spec/tags","blobs_url":"https://api.github.com/repos/appc/spec/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/appc/spec/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/appc/spec/git/refs{/sha}","trees_url":"https://api.github.com/repos/appc/spec/git/trees{/sha}","statuses_url":"https://api.github.com/repos/appc/spec/statuses/{sha}","languages_url":"https://api.github.com/repos/appc/spec/languages","stargazers_url":"https://api.github.com/repos/appc/spec/stargazers","contributors_url":"https://api.github.com/repos/appc/spec/contributors","subscribers_url":"https://api.github.com/repos/appc/spec/subscribers","subscription_url":"https://api.github.com/repos/appc/spec/subscription","commits_url":"https://api.github.com/repos/appc/spec/commits{/sha}","git_commits_url":"https://api.github.com/repos/appc/spec/git/commits{/sha}","comments_url":"https://api.github.com/repos/appc/spec/comments{/number}","issue_comment_url":"https://api.github.com/repos/appc/spec/issues/comments{/number}","contents_url":"https://api.github.com/repos/appc/spec/contents/{+path}","compare_url":"https://api.github.com/repos/appc/spec/compare/{base}...{head}","merges_url":"https://api.github.com/repos/appc/spec/merges","archive_url":"https://api.github.com/repos/appc/spec/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/appc/spec/downloads","issues_url":"https://api.github.com/repos/appc/spec/issues{/number}","pulls_url":"https://api.github.com/repos/appc/spec/pulls{/number}","milestones_url":"https://api.github.com/repos/appc/spec/milestones{/number}","notifications_url":"https://api.github.com/repos/appc/spec/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/appc/spec/labels{/name}","releases_url":"https://api.github.com/repos/appc/spec/releases{/id}","created_at":"2014-12-09T19:17:54Z","updated_at":"2015-02-26T00:16:33Z","pushed_at":"2015-02-25T03:10:34Z","git_url":"git://github.com/appc/spec.git","ssh_url":"git@github.com:appc/spec.git","clone_url":"https://github.com/appc/spec.git","svn_url":"https://github.com/appc/spec","homepage":null,"size":3290,"stargazers_count":391,"watchers_count":391,"language":"Go","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":43,"mirror_url":null,"open_issues_count":59,"forks":43,"open_issues":59,"watchers":391,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/appc/spec/pulls/207"},"html":{"href":"https://github.com/appc/spec/pull/207"},"issue":{"href":"https://api.github.com/repos/appc/spec/issues/207"},"comments":{"href":"https://api.github.com/repos/appc/spec/issues/207/comments"},"review_comments":{"href":"https://api.github.com/repos/appc/spec/pulls/207/comments"},"review_comment":{"href":"https://api.github.com/repos/appc/spec/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/appc/spec/pulls/207/commits"},"statuses":{"href":"https://api.github.com/repos/appc/spec/statuses/54563935167937134b4e62bfe2dc3a24e173ba5d"}}}}