[{"data":1,"prerenderedAt":422},["ShallowReactive",2],{"project-49801329":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":29,"sentiment":30,"stance_mix":31,"scored_comments":36,"aspects":37,"strip":44,"post_text":46,"what":47,"said":93,"maker_in_thread":211,"shape":222,"grid":226,"attempts":384,"same_week":385,"maker_shows":42,"maker_hidden":414,"reader_version":415,"card":416},"49801329","Drop","A rootless Linux sandbox with gVisor support","title","Show HN: Drop – A rootless Linux sandbox with gVisor support","https:\u002F\u002Fdroprun.sh\u002F","droprun.sh","mixedbit",1790085167,2026,193,63,308,4366,8,"notable","dev_tools","sandboxing","cli",[24,25,26,27,28],"sandbox","rootless linux","gvisor","namespaces","virtualenv alternative","curious",0.117,{"positive":32,"neutral":33,"mixed":34,"critical":35},6,17,2,4,29,{"docs":38,"idea":41,"performance":43},{"positive":39,"critical":40},1,0,{"positive":35,"critical":42},3,{"positive":40,"critical":39},[42,45,40,40,45,40,42,42,42,42,45,40,45,40,40,40,40,45,40,42,42,40,42,42,39,39,42,42,39,40,42,42,39,40,40,40,42,40,42,42],5,"I created Drop because I always felt uneasy installing and running third-party programs using my main user account. A single compromised dependency means a full compromise of the system. What is even worse, because I ship software from my computer, a single compromised dependency can lead to compromise of all the users of my software.\n\nContainers and VMs are one solution, but for local work, they are often detrimental to productivity. It takes effort to configure a machine with all the tools and configs needed for productive work, but a container or a VM will be stripped of all these tools. Th",{"problem":48,"audience":54,"pricing":67,"motivation":68,"time_to_build":67,"stack":72,"openness":91,"stage":92,"team_size":91},{"value":49,"source":50,"evidence":51},"Running third-party programs with the main user account risks full system compromise via dependencies","maker",[52],{"id":53},"post",{"value":55,"source":56,"evidence":57},"developers who run third-party code or agents locally on Linux","inferred",[58,59,63],{"id":53},{"id":60,"by":61,"text":62},"49802414","refibrillator","Hi OP, funny enough I’m working on something very similar. Lots of us are I guess! Take that as validation of your thinking. I like that your readme has a couple paragraphs…",{"id":64,"by":65,"text":66},"49803146","p2004a","Thank you for building it! I started using Drop a few weeks ago, and I've been very happy with it so far (thanks again for quickly fixing a few issues I've reported :)!). For me,…",null,{"value":69,"source":50,"evidence":70},"Uneasy running third-party programs under main account; containers hurt local productivity",[71],{"id":53},[73,81,85],{"value":74,"source":75,"evidence":76},"Go (gVisor runtime)","commenter",[77],{"id":78,"by":79,"text":80},"49803618","hnav","gVisor virtualizes all syscalls which pass through a host userspace golang process that then maps onto the host's syscalls.",{"value":82,"source":50,"evidence":83},"Linux namespaces",[84],{"id":53},{"value":86,"source":50,"evidence":87},"gVisor runsc",[88],{"id":89,"by":11,"text":90},"49804039","My approach with Drop was to start from designing a sandbox user experience. The key idea was to preserve as many aspects of the user's work environment as possible while…","unknown","launched",{"praise":94,"objections":107,"requests":133,"questions":145,"alternatives":176},[95],{"value":96,"source":75,"evidence":97},"Well-thought-out approach that fits virtualenv-like workflow",[98,102,106],{"id":99,"by":100,"text":101},"49805149","XJ6w9dTdM","As everyone mention, there are a lot of implementations of this idea, and not only for agent workflows. My own approach has the following features, hopefully that gets stolen…",{"id":103,"by":104,"text":105},"49802747","pavinjoseph","This is exactly what I was looking for - the website and docs are easy on the brain. I have some apps hosted on distrobox containers that I'd rather not have write access to my…",{"id":64,"by":65,"text":66},[108,120,127],{"value":109,"source":75,"evidence":110},"Overlaps with existing tools like bubblewrap, runc, and gVisor usage",[111,115,119],{"id":112,"by":113,"text":114},"49803186","xyzzy_plugh","I've been using gVisor with Docker (or Docker-compatible runtimes) via runsc for years. It isn't obvious to me what this does that we haven't been able to do for some time now.",{"id":116,"by":117,"text":118},"49802775","messh","How is this different than bwrap or srt and others? Im using bwrap to achieve read only everywhere and and write on pwd. Also pi and other coding agents all have sandboxing that…",{"id":60,"by":61,"text":62},{"value":121,"source":75,"evidence":122},"Linux-only, does not work on macOS",[123],{"id":124,"by":125,"text":126},"49803553","orliesaurus","So this seems to be useful to me, when you run drop run it starts a child process and places it into a Linux namespace...it gives the process a separate identity and limited…",{"value":128,"source":50,"evidence":129},"Does not work inside containers or support nested containers",[130],{"id":131,"by":11,"text":132},"49805496","Unfortunately not, and it also does not support starting containers from the sandbox.",[134,141],{"value":135,"source":75,"evidence":136},"GUI application sandboxing",[137,138],{"id":64,"by":65,"text":66},{"id":139,"by":11,"text":140},"49805316","Thanks! I have GUI applications sandboxing on the roadmap. I also ponder the idea to add VM as the third runtime option (in addition to currently supported native Linux…",{"value":142,"source":75,"evidence":143},"Support for containerized apps like docker compose",[144],{"id":64,"by":65,"text":66},[146,154,165],{"value":147,"source":75,"evidence":148},"How does it differ from bubblewrap and other sandboxes",[149,150],{"id":116,"by":117,"text":118},{"id":151,"by":152,"text":153},"49802078","JoshTriplett","So, the primary advantage of this over bubblewrap is the insulation layer between the program and kernel syscalls?",{"value":155,"source":75,"evidence":156},"Performance overhead of gVisor",[157,161],{"id":158,"by":159,"text":160},"49812316","adityamishra241","This is a really interesting middle ground between venvs and containers. How much overhead does gVisor add in practice for typical local development workloads?",{"id":162,"by":163,"text":164},"49804984","tty456","That sounds like a huge hit to performance",{"value":166,"source":75,"evidence":167},"Threat model: credentials inside sandbox",[168,172],{"id":169,"by":170,"text":171},"49811665","joserobles84","Worth being explicit about the threat model, because it decides the design. Isolating against a compromised dependency needs filesystem and egress control. Isolating against your…",{"id":173,"by":174,"text":175},"49806390","0cf8612b2e1e","There are a lot of options in this space, but I feel utterly helpless. Which of these are really secure such that I could intentionally run malware without fear of my ssh keys…",[177,185,196,200,207],{"value":178,"source":75,"evidence":179},"bubblewrap",[180,184],{"id":181,"by":182,"text":183},"49802499","saghm","This is super interesting to me. I've slowly been working on something similar (https:\u002F\u002Fgitlab.com\u002Fsaghm\u002Ftartarus) because my ideal sandboxing is \"prevent writing to anything…",{"id":116,"by":117,"text":118},{"value":186,"source":75,"evidence":187},"Podman or LXC containers",[188,192],{"id":189,"by":190,"text":191},"49803947","zenoprax","Can you explain a bit more about the boundary between the environment and my system? Is it just giving read-only access to \u002Fusr\u002Flib? I use an alias to launch a Podman container…",{"id":193,"by":194,"text":195},"49803594","Hasz","Hello, cool project! Can you explain to me what the benefit of using this is versus something like an LXC container? It is currently my preferred \"temp dev env\" that behaves like…",{"value":197,"source":75,"evidence":198},"nsjail, runc, crun",[199],{"id":60,"by":61,"text":62},{"value":201,"source":75,"evidence":202},"Firecracker microVM",[203],{"id":204,"by":205,"text":206},"49803890","srcreigh","I like to use firecracmer, since it has no support for many things, eg host filesystem mounting in the guest. Can you make any similar guarantees about Drop?",{"value":208,"source":75,"evidence":209},"litterbox",[210],{"id":64,"by":65,"text":66},{"comments":212,"answered":213,"key":214},14,11,[215,218,221],{"id":216,"text":217},"49803062","Thanks! My initial approach and the first prototype was for Drop to be a Python script that generates config.json file for runc Docker runtime (I also tried crun). I ran into…",{"id":219,"text":220},"49804699","This table shows which dirs are exposed from your system: https:\u002F\u002Fdroprun.sh\u002Fdocs\u002Fsandbox-overview\u002F#filesystem-layout Compared to your setup: * \u002Fusr is from your host, so you…",{"id":139,"text":140},{"commenters":223,"max_depth":35,"maker_replies":212,"first_comment_mins":224,"lifespan_hours":225},41,42,48,[227,229,231,235,239,242,244,245,248,250,253,255,258,259,262,265,266,267,271,275,276,279,282,284,286,289,292,295,298,300,303,304,307,311,313,316,318,319,321,323,326,329,333,335,337,339,342,344,345,347,350,354,358,360,362,364,366,370,372,374,378,379,381],[60,40,42,228,61,40],"maker\u002Fneutral\u002Fdocs",[216,40,40,230,11,39],"maker\u002Fneutral\u002Fidea",[232,39,45,233,234,40],"49804373","project\u002Fpositive\u002Fidea","gregwebs",[236,39,40,237,238,40],"49804472","commenter\u002Fneutral\u002Fnone","NewJazz",[240,39,40,237,241,40],"49804672","asb",[243,39,40,237,234,40],"49806867",[181,34,45,233,182,40],[246,34,40,237,247,40],"49802567","killerstorm",[249,34,40,237,182,40],"49803901",[251,34,40,237,252,40],"49803397","everforward",[189,42,42,254,190,40],"project\u002Fneutral\u002Fdocs",[256,42,42,254,257,40],"49804625","nign",[219,42,40,254,11,39],[260,42,42,261,190,40],"49809379","project\u002Fneutral\u002Fidea",[263,42,42,254,264,40],"49830355","aftbit",[64,35,45,233,65,40],[139,35,40,261,11,39],[268,35,40,269,270,40],"49824671","other\u002Fneutral\u002Fnone","binsquare",[272,45,45,273,274,40],"49802029","maker\u002Fpositive\u002Fnone","yu3zhou4",[99,32,45,233,100,40],[277,278,40,269,270,40],"49807070",7,[280,278,40,269,281,40],"49807417","atechboy",[283,278,40,269,270,40],"49809766",[285,278,40,269,11,39],"49819140",[287,18,40,269,288,40],"49806109","programd",[290,18,40,269,291,40],"49807365","chickensong",[103,293,45,294,104,40],9,"project\u002Fpositive\u002Fdocs",[158,296,42,297,159,40],10,"project\u002Fneutral\u002Fperformance",[299,296,40,297,11,39],"49813849",[301,213,42,261,302,40],"49803109","ec109685",[89,213,40,261,11,39],[305,213,40,306,11,39],"49804267","project\u002Fneutral\u002Fprivacy",[308,309,42,261,310,40],"49802192",12,"zoobab",[312,309,40,261,11,39],"49805554",[314,309,40,269,315,40],"49807510","throwaway2046",[193,317,42,261,194,40],13,[78,317,42,297,79,40],[162,317,39,320,163,40],"project\u002Fcritical\u002Fperformance",[322,317,40,297,11,39],"49805740",[324,317,39,325,194,40],"49811207","project\u002Fcritical\u002Fidea",[327,212,42,261,328,40],"49802781","LeBit",[330,212,42,331,332,40],"49809073","project\u002Fmixed\u002Fidea","PtrMzk",[116,334,42,261,117,40],15,[336,334,40,261,11,39],"49803460",[112,338,39,325,113,40],16,[340,338,40,237,341,40],"49803357","Xiol",[343,338,40,237,113,40],"49805221",[204,33,42,261,205,40],[346,33,40,261,11,39],"49805480",[124,348,42,349,125,40],18,"project\u002Fmixed\u002Fnone",[351,352,39,325,353,40],"49812638",19,"asdfasdfe",[355,356,40,269,357,40],"49808021",20,"sieve",[359,356,40,269,328,40],"49808597",[173,361,40,269,174,40],21,[363,361,40,269,291,40],"49807447",[365,361,40,269,11,39],"49813761",[367,368,40,269,369,40],"49806747",22,"denysvitali",[151,371,42,261,152,40],23,[373,371,40,261,11,39],"49802324",[375,376,42,261,377,40],"49802828",24,"tylergetsay",[131,376,40,320,11,39],[169,380,42,261,170,40],25,[382,380,42,261,383,40],"49820227","naman_307",[],[386,391,396,401,405,409],{"id":387,"name":388,"points":389,"category":390},"49823738","Bastardica",862,"creative",{"id":392,"name":393,"points":394,"category":395},"49783133","Mini-AGI",277,"ai",{"id":397,"name":398,"points":399,"category":400},"49740105","Setup",251,"productivity",{"id":402,"name":403,"points":404,"category":20},"49800574","JevBench",154,{"id":406,"name":407,"points":408,"category":395},"49776523","Tiny Brains",116,{"id":410,"name":411,"points":412,"category":413},"49746346","Snapdrop",112,"infrastructure",false,"v2",{"id":417,"name":5,"line":6,"ai":414,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":418,"top":18,"kw":419,"maker":11,"domain":10,"tier":19,"attempts":40,"strip":420,"url":9,"mix":421,"praise":96,"objection":109,"sub":21},49801329,0.12,[24,25,26,27,28],"3500503333505000050330331133103310003033",[32,33,34,35],1794036710633]