{"action":"created","comment":{"url":"https://api.github.com/repos/ostreedev/ostree/pulls/comments/66429399","id":66429399,"diff_hunk":"@@ -147,37 +151,54 @@ See\n [this comment](http://blog.verbum.org/2013/08/26/ostree-v2013-6-released/#comment-1169)\n for a comparison.\n \n-## NixOS\n-\n-See [NixOS](http://nixos.org/). It was a very influential project for\n-OSTree.  NixOS and OSTree both support the idea of independent \"roots\"\n-that are bootable.\n-\n-In NixOS, the entire system is based on checksums of package inputs\n-(build dependencies) - see [Nix store](http://nixos.org/nix/manual/#chap-package-management/). A both\n-positive and negative of the Nix model is that a change in the build\n-dependencies (e.g. being built with a newer gcc), requires a cascading\n-rebuild of everything.\n-\n-In OSTree, the checksums are of object *content* (including extended\n-attributes). This means that any data that's identical is\n-transparently, automatically shared on disk. It's possible to ask the\n-Nix store to deduplicate, (via hard links and immutable bit), but this\n-is significantly less efficient than the OSTree approach. The Nix use\n-of the ext immutable bit is racy, since it has to be briefly removed\n-to make a hard link.\n-\n-At the lowest level, OSTree is just \"git for binaries\" - it isn't tied\n-strongly to any particular build system. You can put whatever data you\n-want inside an OSTree repository, built however you like. So for\n-example, while one could make a build system that did the \"purely\n-functional\" approach of Nix, it also works to have a build system that\n-just rebuilds individual components (packages) as they change, without\n-forcing a rebuild of their dependencies.\n-\n-The author of OSTree believes that while Nix has some good ideas,\n-forcing a rebuild of everything for a security update to e.g. glibc is\n-not practical at scale.\n+## NixOS / Nix\n+\n+See [NixOS](http://nixos.org/). It was a very influential project for OSTree.\n+NixOS and OSTree both support the idea of independent \"roots\" that are bootable.\n+\n+In NixOS, files in a package are accessed by a path depending on the checksums\n+of package inputs (build dependencies) - see\n+[Nix store](http://nixos.org/nix/manual/#chap-package-management/).\n+However, OSTree uses a commit/deploy model - it isn't tied to any particular\n+directory layout, and you can put whatever data you want inside an OSTree, for\n+example the standard FHS layout. A both positive and negative of the Nix model\n+is that a change in the build dependencies (e.g. being built with a newer gcc),\n+requires a cascading rebuild of everything. It's good because it makes it easy\n+to do massive system-wide changes such as gcc upgrades, and allows installing\n+multiple versions of packages at once. However, a security update to e.g. glibc\n+forces a rebuild of everything from scratch, and so Nix is not practical at\n+scale. OSTree supports using a build system that just rebuilds individual\n+components (packages) as they change, without forcing a rebuild of their\n+dependencies.\n+\n+Nix automatically detects runtime package dependencies by scanning content for\n+hashes. OSTree only supports only system-level images, and doesn't do dependency\n+management. Nix can store arbitrary files, using nix-store --add, but, more\n+commonly, paths are added as the result of running a derivation file generated\n+using the Nix language. OSTree is build-system agnostic; filesystem trees are\n+committed using a simple C API, and this is the only way to commit files.\n+\n+OSTree automatically shares the storage of identical data using hard links into\n+a content-addressed store. Nix can deduplicate using hard links as well, using\n+the auto-optimise-store option, but this is not on by default, and Nix does not\n+guarantee that all of its files are in the content-addressed store. OSTree\n+provides a git-like command line interface for browsing the content-addressed\n+store, while Nix does not have this functionality.\n+\n+Nix used to use the immutable bit to prevent modifications to /nix/store, but\n+now it uses a read-only bind mount. The bind mount can be privately remounted,\n+allowing per-process privileged write access. OSTree still uses the immutable\n+bit, which is awkward, since it has to be briefly removed to make a hard link\n+when checking out.","path":"docs/manual/related-projects.md","position":84,"original_position":84,"commit_id":"80f895af43a559084e7d439197f58b8819d03fd4","original_commit_id":"564ee46dc1f6220517a000d7246d15abfd3fb285","user":{"login":"cgwalters","id":244096,"avatar_url":"https://avatars.githubusercontent.com/u/244096?v=3","gravatar_id":"","url":"https://api.github.com/users/cgwalters","html_url":"https://github.com/cgwalters","followers_url":"https://api.github.com/users/cgwalters/followers","following_url":"https://api.github.com/users/cgwalters/following{/other_user}","gists_url":"https://api.github.com/users/cgwalters/gists{/gist_id}","starred_url":"https://api.github.com/users/cgwalters/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cgwalters/subscriptions","organizations_url":"https://api.github.com/users/cgwalters/orgs","repos_url":"https://api.github.com/users/cgwalters/repos","events_url":"https://api.github.com/users/cgwalters/events{/privacy}","received_events_url":"https://api.github.com/users/cgwalters/received_events","type":"User","site_admin":false},"body":"OSTree only uses the immutable bit for `/` in deployment roots, so there's no real races here.","created_at":"2016-06-09T12:19:54Z","updated_at":"2016-06-09T12:19:54Z","html_url":"https://github.com/ostreedev/ostree/pull/327#discussion_r66429399","pull_request_url":"https://api.github.com/repos/ostreedev/ostree/pulls/327","_links":{"self":{"href":"https://api.github.com/repos/ostreedev/ostree/pulls/comments/66429399"},"html":{"href":"https://github.com/ostreedev/ostree/pull/327#discussion_r66429399"},"pull_request":{"href":"https://api.github.com/repos/ostreedev/ostree/pulls/327"}}},"pull_request":{"url":"https://api.github.com/repos/ostreedev/ostree/pulls/327","id":73147215,"html_url":"https://github.com/ostreedev/ostree/pull/327","diff_url":"https://github.com/ostreedev/ostree/pull/327.diff","patch_url":"https://github.com/ostreedev/ostree/pull/327.patch","issue_url":"https://api.github.com/repos/ostreedev/ostree/issues/327","number":327,"state":"open","locked":false,"title":"Small patches","user":{"login":"Mathnerd314","id":322214,"avatar_url":"https://avatars.githubusercontent.com/u/322214?v=3","gravatar_id":"","url":"https://api.github.com/users/Mathnerd314","html_url":"https://github.com/Mathnerd314","followers_url":"https://api.github.com/users/Mathnerd314/followers","following_url":"https://api.github.com/users/Mathnerd314/following{/other_user}","gists_url":"https://api.github.com/users/Mathnerd314/gists{/gist_id}","starred_url":"https://api.github.com/users/Mathnerd314/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Mathnerd314/subscriptions","organizations_url":"https://api.github.com/users/Mathnerd314/orgs","repos_url":"https://api.github.com/users/Mathnerd314/repos","events_url":"https://api.github.com/users/Mathnerd314/events{/privacy}","received_events_url":"https://api.github.com/users/Mathnerd314/received_events","type":"User","site_admin":false},"body":"These are some small and hopefully uncontroversial changes:\r\n* Moving the pull code to repo-pull to make the footprint of libsoup smaller (the eventual goal is to run all networking / parsing code unprivileged in a fetcher process, similar to [OpenSSH](http://www.citi.umich.edu/u/provos/papers/privsep.pdf))\r\n* Use 1 instead of 0 for file timestamps (borrowed from [Nix](https://github.com/NixOS/nix/commit/14bc3ce3d6d5745717fa19b8b43b5fdd117ff757) after I saw https://bugzilla.redhat.com/show_bug.cgi?id=1229160)\r\n* Documentation changes / expansion\r\n\r\nOf course, taken as a whole the diff is rather large.","created_at":"2016-06-09T01:46:15Z","updated_at":"2016-06-09T12:19:54Z","closed_at":null,"merged_at":null,"merge_commit_sha":"652a56232c0a228fdc5bede49596d68103fff320","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/ostreedev/ostree/pulls/327/commits","review_comments_url":"https://api.github.com/repos/ostreedev/ostree/pulls/327/comments","review_comment_url":"https://api.github.com/repos/ostreedev/ostree/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ostreedev/ostree/issues/327/comments","statuses_url":"https://api.github.com/repos/ostreedev/ostree/statuses/80f895af43a559084e7d439197f58b8819d03fd4","head":{"label":"Mathnerd314:small-patches","ref":"small-patches","sha":"80f895af43a559084e7d439197f58b8819d03fd4","user":{"login":"Mathnerd314","id":322214,"avatar_url":"https://avatars.githubusercontent.com/u/322214?v=3","gravatar_id":"","url":"https://api.github.com/users/Mathnerd314","html_url":"https://github.com/Mathnerd314","followers_url":"https://api.github.com/users/Mathnerd314/followers","following_url":"https://api.github.com/users/Mathnerd314/following{/other_user}","gists_url":"https://api.github.com/users/Mathnerd314/gists{/gist_id}","starred_url":"https://api.github.com/users/Mathnerd314/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Mathnerd314/subscriptions","organizations_url":"https://api.github.com/users/Mathnerd314/orgs","repos_url":"https://api.github.com/users/Mathnerd314/repos","events_url":"https://api.github.com/users/Mathnerd314/events{/privacy}","received_events_url":"https://api.github.com/users/Mathnerd314/received_events","type":"User","site_admin":false},"repo":{"id":59446188,"name":"ostree","full_name":"Mathnerd314/ostree","owner":{"login":"Mathnerd314","id":322214,"avatar_url":"https://avatars.githubusercontent.com/u/322214?v=3","gravatar_id":"","url":"https://api.github.com/users/Mathnerd314","html_url":"https://github.com/Mathnerd314","followers_url":"https://api.github.com/users/Mathnerd314/followers","following_url":"https://api.github.com/users/Mathnerd314/following{/other_user}","gists_url":"https://api.github.com/users/Mathnerd314/gists{/gist_id}","starred_url":"https://api.github.com/users/Mathnerd314/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Mathnerd314/subscriptions","organizations_url":"https://api.github.com/users/Mathnerd314/orgs","repos_url":"https://api.github.com/users/Mathnerd314/repos","events_url":"https://api.github.com/users/Mathnerd314/events{/privacy}","received_events_url":"https://api.github.com/users/Mathnerd314/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Mathnerd314/ostree","description":"Operating system and container binary deployment and upgrades","fork":true,"url":"https://api.github.com/repos/Mathnerd314/ostree","forks_url":"https://api.github.com/repos/Mathnerd314/ostree/forks","keys_url":"https://api.github.com/repos/Mathnerd314/ostree/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Mathnerd314/ostree/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Mathnerd314/ostree/teams","hooks_url":"https://api.github.com/repos/Mathnerd314/ostree/hooks","issue_events_url":"https://api.github.com/repos/Mathnerd314/ostree/issues/events{/number}","events_url":"https://api.github.com/repos/Mathnerd314/ostree/events","assignees_url":"https://api.github.com/repos/Mathnerd314/ostree/assignees{/user}","branches_url":"https://api.github.com/repos/Mathnerd314/ostree/branches{/branch}","tags_url":"https://api.github.com/repos/Mathnerd314/ostree/tags","blobs_url":"https://api.github.com/repos/Mathnerd314/ostree/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Mathnerd314/ostree/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Mathnerd314/ostree/git/refs{/sha}","trees_url":"https://api.github.com/repos/Mathnerd314/ostree/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Mathnerd314/ostree/statuses/{sha}","languages_url":"https://api.github.com/repos/Mathnerd314/ostree/languages","stargazers_url":"https://api.github.com/repos/Mathnerd314/ostree/stargazers","contributors_url":"https://api.github.com/repos/Mathnerd314/ostree/contributors","subscribers_url":"https://api.github.com/repos/Mathnerd314/ostree/subscribers","subscription_url":"https://api.github.com/repos/Mathnerd314/ostree/subscription","commits_url":"https://api.github.com/repos/Mathnerd314/ostree/commits{/sha}","git_commits_url":"https://api.github.com/repos/Mathnerd314/ostree/git/commits{/sha}","comments_url":"https://api.github.com/repos/Mathnerd314/ostree/comments{/number}","issue_comment_url":"https://api.github.com/repos/Mathnerd314/ostree/issues/comments{/number}","contents_url":"https://api.github.com/repos/Mathnerd314/ostree/contents/{+path}","compare_url":"https://api.github.com/repos/Mathnerd314/ostree/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Mathnerd314/ostree/merges","archive_url":"https://api.github.com/repos/Mathnerd314/ostree/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Mathnerd314/ostree/downloads","issues_url":"https://api.github.com/repos/Mathnerd314/ostree/issues{/number}","pulls_url":"https://api.github.com/repos/Mathnerd314/ostree/pulls{/number}","milestones_url":"https://api.github.com/repos/Mathnerd314/ostree/milestones{/number}","notifications_url":"https://api.github.com/repos/Mathnerd314/ostree/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Mathnerd314/ostree/labels{/name}","releases_url":"https://api.github.com/repos/Mathnerd314/ostree/releases{/id}","deployments_url":"https://api.github.com/repos/Mathnerd314/ostree/deployments","created_at":"2016-05-23T02:24:57Z","updated_at":"2016-05-23T02:25:00Z","pushed_at":"2016-06-09T02:04:16Z","git_url":"git://github.com/Mathnerd314/ostree.git","ssh_url":"git@github.com:Mathnerd314/ostree.git","clone_url":"https://github.com/Mathnerd314/ostree.git","svn_url":"https://github.com/Mathnerd314/ostree","homepage":"https://ostree.readthedocs.org/en/latest/","size":9658,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":false,"has_downloads":true,"has_wiki":false,"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":"ostreedev:master","ref":"master","sha":"b4c49f5acf030552bcde564eb53d04ea521c7641","user":{"login":"ostreedev","id":17928213,"avatar_url":"https://avatars.githubusercontent.com/u/17928213?v=3","gravatar_id":"","url":"https://api.github.com/users/ostreedev","html_url":"https://github.com/ostreedev","followers_url":"https://api.github.com/users/ostreedev/followers","following_url":"https://api.github.com/users/ostreedev/following{/other_user}","gists_url":"https://api.github.com/users/ostreedev/gists{/gist_id}","starred_url":"https://api.github.com/users/ostreedev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ostreedev/subscriptions","organizations_url":"https://api.github.com/users/ostreedev/orgs","repos_url":"https://api.github.com/users/ostreedev/repos","events_url":"https://api.github.com/users/ostreedev/events{/privacy}","received_events_url":"https://api.github.com/users/ostreedev/received_events","type":"Organization","site_admin":false},"repo":{"id":4614541,"name":"ostree","full_name":"ostreedev/ostree","owner":{"login":"ostreedev","id":17928213,"avatar_url":"https://avatars.githubusercontent.com/u/17928213?v=3","gravatar_id":"","url":"https://api.github.com/users/ostreedev","html_url":"https://github.com/ostreedev","followers_url":"https://api.github.com/users/ostreedev/followers","following_url":"https://api.github.com/users/ostreedev/following{/other_user}","gists_url":"https://api.github.com/users/ostreedev/gists{/gist_id}","starred_url":"https://api.github.com/users/ostreedev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ostreedev/subscriptions","organizations_url":"https://api.github.com/users/ostreedev/orgs","repos_url":"https://api.github.com/users/ostreedev/repos","events_url":"https://api.github.com/users/ostreedev/events{/privacy}","received_events_url":"https://api.github.com/users/ostreedev/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ostreedev/ostree","description":"Operating system and container binary deployment and upgrades","fork":false,"url":"https://api.github.com/repos/ostreedev/ostree","forks_url":"https://api.github.com/repos/ostreedev/ostree/forks","keys_url":"https://api.github.com/repos/ostreedev/ostree/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ostreedev/ostree/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ostreedev/ostree/teams","hooks_url":"https://api.github.com/repos/ostreedev/ostree/hooks","issue_events_url":"https://api.github.com/repos/ostreedev/ostree/issues/events{/number}","events_url":"https://api.github.com/repos/ostreedev/ostree/events","assignees_url":"https://api.github.com/repos/ostreedev/ostree/assignees{/user}","branches_url":"https://api.github.com/repos/ostreedev/ostree/branches{/branch}","tags_url":"https://api.github.com/repos/ostreedev/ostree/tags","blobs_url":"https://api.github.com/repos/ostreedev/ostree/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ostreedev/ostree/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ostreedev/ostree/git/refs{/sha}","trees_url":"https://api.github.com/repos/ostreedev/ostree/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ostreedev/ostree/statuses/{sha}","languages_url":"https://api.github.com/repos/ostreedev/ostree/languages","stargazers_url":"https://api.github.com/repos/ostreedev/ostree/stargazers","contributors_url":"https://api.github.com/repos/ostreedev/ostree/contributors","subscribers_url":"https://api.github.com/repos/ostreedev/ostree/subscribers","subscription_url":"https://api.github.com/repos/ostreedev/ostree/subscription","commits_url":"https://api.github.com/repos/ostreedev/ostree/commits{/sha}","git_commits_url":"https://api.github.com/repos/ostreedev/ostree/git/commits{/sha}","comments_url":"https://api.github.com/repos/ostreedev/ostree/comments{/number}","issue_comment_url":"https://api.github.com/repos/ostreedev/ostree/issues/comments{/number}","contents_url":"https://api.github.com/repos/ostreedev/ostree/contents/{+path}","compare_url":"https://api.github.com/repos/ostreedev/ostree/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ostreedev/ostree/merges","archive_url":"https://api.github.com/repos/ostreedev/ostree/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ostreedev/ostree/downloads","issues_url":"https://api.github.com/repos/ostreedev/ostree/issues{/number}","pulls_url":"https://api.github.com/repos/ostreedev/ostree/pulls{/number}","milestones_url":"https://api.github.com/repos/ostreedev/ostree/milestones{/number}","notifications_url":"https://api.github.com/repos/ostreedev/ostree/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ostreedev/ostree/labels{/name}","releases_url":"https://api.github.com/repos/ostreedev/ostree/releases{/id}","deployments_url":"https://api.github.com/repos/ostreedev/ostree/deployments","created_at":"2012-06-10T11:22:40Z","updated_at":"2016-06-03T13:48:24Z","pushed_at":"2016-06-09T11:44:19Z","git_url":"git://github.com/ostreedev/ostree.git","ssh_url":"git@github.com:ostreedev/ostree.git","clone_url":"https://github.com/ostreedev/ostree.git","svn_url":"https://github.com/ostreedev/ostree","homepage":"https://ostree.readthedocs.org/en/latest/","size":10919,"stargazers_count":40,"watchers_count":40,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":30,"mirror_url":null,"open_issues_count":17,"forks":30,"open_issues":17,"watchers":40,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ostreedev/ostree/pulls/327"},"html":{"href":"https://github.com/ostreedev/ostree/pull/327"},"issue":{"href":"https://api.github.com/repos/ostreedev/ostree/issues/327"},"comments":{"href":"https://api.github.com/repos/ostreedev/ostree/issues/327/comments"},"review_comments":{"href":"https://api.github.com/repos/ostreedev/ostree/pulls/327/comments"},"review_comment":{"href":"https://api.github.com/repos/ostreedev/ostree/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ostreedev/ostree/pulls/327/commits"},"statuses":{"href":"https://api.github.com/repos/ostreedev/ostree/statuses/80f895af43a559084e7d439197f58b8819d03fd4"}}}}
{"actor":{"display_login":"cgwalters"}}