{"action":"created","issue":{"url":"https://api.github.com/repos/heroku/heroku-docker/issues/78","labels_url":"https://api.github.com/repos/heroku/heroku-docker/issues/78/labels{/name}","comments_url":"https://api.github.com/repos/heroku/heroku-docker/issues/78/comments","events_url":"https://api.github.com/repos/heroku/heroku-docker/issues/78/events","html_url":"https://github.com/heroku/heroku-docker/issues/78","id":75767067,"number":78,"title":"What is the relationship with buildpacks?","user":{"login":"hunterloftis","id":364501,"avatar_url":"https://avatars.githubusercontent.com/u/364501?v=3","gravatar_id":"","url":"https://api.github.com/users/hunterloftis","html_url":"https://github.com/hunterloftis","followers_url":"https://api.github.com/users/hunterloftis/followers","following_url":"https://api.github.com/users/hunterloftis/following{/other_user}","gists_url":"https://api.github.com/users/hunterloftis/gists{/gist_id}","starred_url":"https://api.github.com/users/hunterloftis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hunterloftis/subscriptions","organizations_url":"https://api.github.com/users/hunterloftis/orgs","repos_url":"https://api.github.com/users/hunterloftis/repos","events_url":"https://api.github.com/users/hunterloftis/events{/privacy}","received_events_url":"https://api.github.com/users/hunterloftis/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/heroku/heroku-docker/milestones/4","html_url":"https://github.com/heroku/heroku-docker/milestones/May%2013:%20Open%20questions","labels_url":"https://api.github.com/repos/heroku/heroku-docker/milestones/4/labels","id":1107655,"number":4,"title":"May 13: Open questions","description":"Answer some open questions, figure out next steps.","creator":{"login":"hunterloftis","id":364501,"avatar_url":"https://avatars.githubusercontent.com/u/364501?v=3","gravatar_id":"","url":"https://api.github.com/users/hunterloftis","html_url":"https://github.com/hunterloftis","followers_url":"https://api.github.com/users/hunterloftis/followers","following_url":"https://api.github.com/users/hunterloftis/following{/other_user}","gists_url":"https://api.github.com/users/hunterloftis/gists{/gist_id}","starred_url":"https://api.github.com/users/hunterloftis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hunterloftis/subscriptions","organizations_url":"https://api.github.com/users/hunterloftis/orgs","repos_url":"https://api.github.com/users/hunterloftis/repos","events_url":"https://api.github.com/users/hunterloftis/events{/privacy}","received_events_url":"https://api.github.com/users/hunterloftis/received_events","type":"User","site_admin":false},"open_issues":7,"closed_issues":0,"state":"open","created_at":"2015-05-12T22:43:50Z","updated_at":"2015-05-13T23:39:04Z","due_on":"2015-05-31T05:00:00Z","closed_at":null},"comments":2,"created_at":"2015-05-12T22:46:20Z","updated_at":"2015-05-14T15:34:14Z","closed_at":null,"body":"Initially, one of our stated goals was to avoid buildpacks and to see what a Docker workflow could be like \"fresh.\" Is this still a path we want to pursue?\r\n\r\nPros: Buildpacks are mature, stable, and well-understood (internally).\r\n\r\nCons: Buildpacks are difficult to compose, unweildy (node -> bash, ruby -> huge), and poorly understood (externally)"},"comment":{"url":"https://api.github.com/repos/heroku/heroku-docker/issues/comments/102074608","html_url":"https://github.com/heroku/heroku-docker/issues/78#issuecomment-102074608","issue_url":"https://api.github.com/repos/heroku/heroku-docker/issues/78","id":102074608,"user":{"login":"ojacobson","id":160985,"avatar_url":"https://avatars.githubusercontent.com/u/160985?v=3","gravatar_id":"","url":"https://api.github.com/users/ojacobson","html_url":"https://github.com/ojacobson","followers_url":"https://api.github.com/users/ojacobson/followers","following_url":"https://api.github.com/users/ojacobson/following{/other_user}","gists_url":"https://api.github.com/users/ojacobson/gists{/gist_id}","starred_url":"https://api.github.com/users/ojacobson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ojacobson/subscriptions","organizations_url":"https://api.github.com/users/ojacobson/orgs","repos_url":"https://api.github.com/users/ojacobson/repos","events_url":"https://api.github.com/users/ojacobson/events{/privacy}","received_events_url":"https://api.github.com/users/ojacobson/received_events","type":"User","site_admin":false},"created_at":"2015-05-14T15:34:14Z","updated_at":"2015-05-14T15:34:14Z","body":"One big limitation of the buildpack system as implemented is that _every buildpack step requires a project to operate on_. The `detect` script inspects the project, so must run with a project. The `compile` script both reads the project files to build things and uses the project directory to store additional components (language runtimes, eg.. The `release` script inspects the built project.\r\n\r\nThis completely cripples Docker's image-layering techniques: anything Docker-based that uses buildpacks will either need to cheat (by violating the buildpack API) or will need to re-install every additional component a buildpack requires on every change to the project, because the project layer happens before the buildpack evaluation, so changes to the project tree will invalidate previously-cached buildpack steps.\r\n\r\nI think we collectively understand that already, but I haven't seen it written down in too many places. :)\r\n\r\nNow - I don't think cheating with the buildpack API is necessarily a bad thing. I think we're nearing the limits of the kinds of systems we can compose out of buildpacks, and bending the API is a great way to explore how we might change or replace the buildpack API to better support other kinds of app. I agree with @hunterloftis that if we weakly commit to buildpacks as they are, we'll likely discover that we've made a strong commitment and be unable to revisit that decision for a long time. This is a new API for our customers, and launching it under the Heroku banner implies a Heroku-ish level of support for it."}}