[{"data":1,"prerenderedAt":446},["ShallowReactive",2],{"project-19827336":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":27,"sentiment":28,"stance_mix":29,"scored_comments":34,"aspects":35,"strip":44,"post_text":45,"what":46,"said":78,"maker_in_thread":174,"shape":176,"grid":180,"attempts":408,"same_week":409,"maker_shows":43,"maker_hidden":438,"reader_version":439,"card":440},"19827336","zfsp","ZFS Implementation in Python","title","Show HN: ZFS Implementation in Python","https:\u002F\u002Fgithub.com\u002Falcarithemad\u002Fzfsp","github.com","alcari",1556986518,2019,411,86,48,2195,3,"legend","infrastructure","filesystem","library",[24,25,26,21],"zfs","python filesystem","zfs reimplementation","mixed",0.039,{"positive":30,"neutral":31,"mixed":32,"critical":33},7,10,2,11,30,{"performance":36,"design":39,"idea":40,"docs":42},{"positive":37,"critical":38},0,5,{"positive":37,"critical":18},{"positive":41,"critical":32},4,{"positive":37,"critical":43},1,[18,37,37,37,37,37,37,37,37,43,43,43,43,37,43,37,43,37,43,37,18,37,18,37,43,18,37,43,37,18,38,37,37,18,38,43,38,38,37,38],null,{"problem":47,"audience":45,"pricing":45,"motivation":58,"time_to_build":45,"stack":67,"openness":76,"stage":77,"team_size":77},{"value":48,"source":49,"evidence":50},"Reimplements ZFS data structures in Python without CDDL-licensed code","commenter",[51,55],{"id":52,"by":53,"text":54},"19827359","lunixbochs","Note: this was implemented without referencing any ZFS source code and should not be subject to the CDDL.",{"id":56,"by":53,"text":57},"19828182","It's capable of doing IO against a real ZFS array without any other code. ARC is an implementation detail and not necessary for correctness. If you removed ARC from ZoL it would…",{"value":59,"source":60,"evidence":61},"Reverse-engineered implementation, apparently for fun and as a reference","inferred",[62,66],{"id":63,"by":64,"text":65},"19827639","AlexanderDhoore","What?! How?! Why?! This is the greatest thing ever. I wish I could just write code for the fun of it. Every time I wonder whether people will use it and give up before I even get…",{"id":56,"by":53,"text":57},[68],{"value":69,"source":49,"evidence":70},"Python",[71,72],{"id":52,"by":53,"text":54},{"id":73,"by":74,"text":75},"19827681","josteink","So we port this python to something not slow, and all the kernel-people can shut up about ZFS being terrible ;)","open_source","unknown",{"praise":79,"objections":96,"requests":125,"questions":140,"alternatives":159},[80,92],{"value":81,"source":49,"evidence":82},"Impressive and fun reverse-engineering work",[83,84,88],{"id":63,"by":64,"text":65},{"id":85,"by":86,"text":87},"19828954","gaze","Hell yeah, dude. This is awesome.",{"id":89,"by":90,"text":91},"19829630","RantyDave","This is all kinds of funny. I'm awash with awe and admiration.",{"value":93,"source":49,"evidence":94},"Useful as a documented reference implementation for other ports",[95],{"id":56,"by":53,"text":57},[97,112],{"value":98,"source":49,"evidence":99},"Python is too slow for a filesystem",[100,104,108],{"id":101,"by":102,"text":103},"19828036","cure","PyPy is faster than Python, yes. But Go, C and many other (compiled) languages are way faster than PyPy. Plus, if you use a language like Go or Rust then you avoid Python's GIL…",{"id":105,"by":106,"text":107},"19829887","GuB-42","Maybe plenty fast for most applications but a filesystem is not one of these IMHO, especially for something as naturally resource hungry as ZFS. A good filesystem implementation…",{"id":109,"by":110,"text":111},"19831897","deaddodo","> Plus, if you use a language like Go or Rust then you avoid Python's GIL No, but then you run into Go's GC and green threads. File systems fit squarely in the realms of \"systems…",{"value":113,"source":49,"evidence":114},"Title overstates it; it is a userspace reader, not a full ZFS implementation",[115,119,122],{"id":116,"by":117,"text":118},"19828000","lelf","Bad title. It’s not a ZFS implementation, so hold your horses.",{"id":120,"by":117,"text":121},"19828563","You don’t need CDDL to use ZFS. Which is all the library does. It does not implement ZFS.",{"id":123,"by":117,"text":124},"19827870","No ARC\u002FL2ARC? Edit: of course not. This is actually just it’s just a ZFS user-facing ”front-end”, not a ZFS implementation.",[126,133],{"value":127,"source":49,"evidence":128},"Write-up of the reverse-engineering process",[129],{"id":130,"by":131,"text":132},"19828449","4oo4","This is awesome! Do you plan on blogging anything about how you went about reverse-engineering?",{"value":134,"source":49,"evidence":135},"Zfs send\u002Freceive compatibility",[136],{"id":137,"by":138,"text":139},"19827983","randrus","Might be interesting\u002Fuseful to aim for zfs send\u002Freceive compatibility :) And thanks for the Borges callout.",[141,152],{"value":142,"source":49,"evidence":143},"Whether the CDDL applies to this implementation",[144,148],{"id":145,"by":146,"text":147},"19827684","newnewpdro","Would the CDDL matter for a python implementation that will never become part of the kernel?",{"id":149,"by":150,"text":151},"19827867","CaliforniaKarl","You'd want a reverse-engineering lawyer, so be certain. But my (IANAL) guess is: If this is a proper reverse-engineered implementation, you could then convert _this_…",{"value":153,"source":49,"evidence":154},"How the implementation was built without a specification",[155],{"id":156,"by":157,"text":158},"19827829","ivanbakel","Pierre Menard, author of The Filesystem. But I'm surprised this is possible without a specification - how can you test a filesystem through hexdumps? The effects of some…",[160,167],{"value":161,"source":49,"evidence":162},"TFS, a ZFS-inspired filesystem in Rust",[163],{"id":164,"by":165,"text":166},"19828932","adamnemecek","There's also TFS a ZFS inspired FS in Rust https:\u002F\u002Fgithub.com\u002Fredox-os\u002Ftfs",{"value":168,"source":49,"evidence":169},"ZboxFS, a userspace filesystem",[170],{"id":171,"by":172,"text":173},"19831076","burmecia","There is an userspace implementations of filesystems ZboxFS: https:\u002F\u002Fgithub.com\u002Fzboxfs\u002Fzbox.",{"comments":37,"answered":37,"key":175},[],{"commenters":177,"max_depth":178,"maker_replies":37,"first_comment_mins":18,"lifespan_hours":179},65,12,116,[181,183,185,189,193,196,199,203,205,207,209,212,214,217,219,222,225,228,230,232,234,236,239,242,245,249,252,255,257,260,262,265,266,269,272,275,279,282,285,287,288,291,293,296,297,300,302,305,306,308,311,313,315,319,321,322,325,328,331,335,338,342,345,348,351,353,356,359,362,365,368,372,373,375,378,382,383,385,389,390,392,396,399,401,403,404],[52,37,18,182,53,37],"project\u002Fneutral\u002Fnone",[73,37,18,184,74,37],"project\u002Fneutral\u002Fperformance",[186,37,37,187,188,37],"19827724","other\u002Fneutral\u002Fperformance","j88439h84",[190,37,37,191,192,37],"19827976","commenter\u002Fneutral\u002Fperformance","spullara",[194,37,37,187,195,37],"19829269","twa927",[197,37,37,198,192,37],"19829475","commenter\u002Fcritical\u002Fperformance",[200,37,37,201,202,37],"19829557","commenter\u002Fneutral\u002Fnone","tigershark",[204,37,37,201,195,37],"19829604",[206,37,37,201,202,37],"19829634",[208,37,37,191,195,37],"19829765",[210,37,37,201,211,37],"19830990","auscompgeek",[213,37,37,201,195,37],"19831652",[215,37,37,201,216,37],"19831877","pjmlp",[218,37,37,201,202,37],"19831666",[220,37,37,191,221,37],"19829746","michaelmrose",[223,37,37,187,224,37],"19831350","d0mine",[226,37,37,187,227,37],"19836112","int_19h",[229,37,37,191,195,37],"19837627",[231,37,37,187,227,37],"19846576",[233,37,37,191,195,37],"19867516",[101,37,43,235,102,37],"project\u002Fcritical\u002Fperformance",[237,37,43,235,238,37],"19829663","klyrs",[240,37,37,201,241,37],"19830981","emmelaich",[243,37,37,201,244,37],"19831691","y4mi",[246,37,43,247,248,37],"19829895","project\u002Fcritical\u002Fdesign","nine_k",[250,37,43,247,251,37],"19830072","hu3",[253,37,37,201,254,37],"19830436","weberc2",[256,37,37,201,195,37],"19831917",[258,37,37,201,259,37],"19832321","BlackFingolfin",[261,37,37,201,227,37],"19836093",[263,37,37,264,216,37],"19831872","other\u002Fneutral\u002Fnone",[109,37,43,247,110,37],[267,37,37,191,268,37],"19832100","fnord123",[270,37,37,191,271,37],"19828675","tanilama",[273,37,43,235,274,37],"19829521","fragmede",[276,37,18,277,278,37],"19829710","project\u002Fneutral\u002Fdesign","moonbug",[280,37,37,264,281,37],"19830791","yjftsjthsd-h",[283,37,37,201,284,37],"19831269","Conan_Kudo",[286,37,37,201,281,37],"19831369",[105,37,43,235,106,37],[289,37,37,187,290,37],"19830691","mehrdadn",[292,37,37,191,195,37],"19831935",[294,37,37,264,295,37],"19828726","aidenn0",[145,37,18,182,146,37],[298,37,37,264,299,37],"19827807","dr0verride",[301,37,37,264,281,37],"19830800",[303,37,37,264,304,37],"19831427","riffraff",[149,37,18,182,150,37],[307,37,37,264,53,37],"19828146",[309,37,37,201,310,37],"19828181","loeg",[312,37,37,264,310,37],"19828178",[116,37,43,314,117,37],"project\u002Fcritical\u002Fidea",[316,37,18,317,318,37],"19829387","project\u002Fneutral\u002Fidea","AHTERIX5000",[156,43,18,320,157,37],"project\u002Fneutral\u002Fdocs",[137,43,18,317,138,37],[323,43,37,264,324,37],"19829068","aerovistae",[326,43,37,201,327,37],"19830924","hueving",[329,43,37,201,330,37],"19831579","iiv",[332,43,43,333,334,37],"19830243","project\u002Fcritical\u002Fdocs","cryptonector",[336,32,37,264,337,37],"19829608","mfsch",[339,32,37,340,341,37],"19830067","other\u002Fneutral\u002Fidea","ummonk",[343,32,37,340,344,37],"19830102","atomicwrites",[346,32,37,340,347,37],"19832920","zymhan",[349,32,18,320,350,37],"19834937","Someone",[63,18,38,352,64,37],"maker\u002Fpositive\u002Fidea",[354,18,37,264,355,37],"19827784","mirceal",[357,18,37,264,358,37],"19827973","anon4242",[360,18,37,264,361,37],"19829507","ehsankia",[363,18,37,264,364,37],"19828271","max0563",[366,18,37,264,367,37],"19829034","js2",[369,18,37,370,371,37],"19829189","commenter\u002Fneutral\u002Fdocs","craftyguy",[123,41,43,235,117,37],[56,41,38,374,53,37],"project\u002Fpositive\u002Fidea",[376,41,38,374,377,37],"19828247","chasil",[379,41,18,380,381,37],"19828436","project\u002Fmixed\u002Fidea","hnlmorg",[120,41,43,314,117,37],[130,38,18,384,131,37],"maker\u002Fneutral\u002Fdocs",[386,387,38,374,388,37],"19828852",6,"PaulHoule",[171,387,37,264,172,37],[85,30,38,391,86,37],"maker\u002Fpositive\u002Fnone",[393,394,38,391,395,37],"19828048",8,"foxhop",[397,394,37,201,398,37],"19828418","rashkov",[400,394,37,264,395,37],"19829192",[89,402,38,391,90,37],9,[164,31,37,264,165,37],[405,33,18,406,407,37],"19829051","project\u002Fmixed\u002Fperformance","garmaine",[],[410,415,420,424,428,433],{"id":411,"name":412,"points":413,"category":414},"19858015","CSSFX",595,"dev_tools",{"id":416,"name":417,"points":418,"category":419},"19810504","Risp",314,"languages",{"id":421,"name":422,"points":423,"category":419},"19862748","piet-metal",306,{"id":425,"name":426,"points":427,"category":20},"19811093","Faast.js",202,{"id":429,"name":430,"points":431,"category":432},"19847258","Full Help",197,"web_saas",{"id":434,"name":435,"points":436,"category":437},"19856799","RSS Search Engine",192,"data",false,"v2",{"id":441,"name":5,"line":6,"ai":438,"cat":20,"year":13,"points":14,"comments":15,"rec":27,"s":442,"top":18,"kw":443,"maker":11,"domain":10,"tier":19,"attempts":37,"strip":444,"url":9,"mix":445,"praise":81,"objection":98,"sub":21},19827336,0.04,[24,25,26,21],"3000000001111010101030301301035003515505",[30,31,32,33],1794036577272]