!VRULIdgoKmKPzJZzjj:nixos.org

Nix Hackers

899 Members
For people hacking on the Nix package manager itself188 Servers

Load older messages


SenderMessageTime
5 Mar 2025
@Ericson2314:matrix.orgJohn EricsonYou can just do it recursively down the deriving path16:06:35
@Ericson2314:matrix.orgJohn EricsonIt's funny I didn't realize this before, because in a way I did: I was always frustrated making dyn drv examples that the "name felt so predetermined'16:07:14
@Ericson2314:matrix.orgJohn EricsonWell, lol, it was exactly pre-determined!16:07:33
@roberthensing:matrix.orgroberthNice. Don't be late because I nerd sniped you!16:08:00
@Ericson2314:matrix.orgJohn Ericson Based on this, I feel like both types of placeholders could look exactly like store paths, except for using a different hash character set to very subtly distinguish them 16:08:25
@Ericson2314:matrix.orgJohn Ericson I might be a little worried about that confusing humans, hah, who just glance at it 16:08:55
@Ericson2314:matrix.orgJohn EricsonBut it would be great for code in Nixpkgs that wants to look for name parts and and the store dir16:09:29
@roberthensing:matrix.orgroberth Canonical JSON looks kinda good. Canonical, sorted, no floats. Strings are bytes, so not technically JSON. RFC 8785 is complicated and does not allow non-Unicode bytes 16:31:41
@emilazy:matrix.orgemily please don't use canonicalized JSON formats 16:42:10
@emilazy:matrix.orgemilypeople WILL use something less rigid and only find out years down the line when it's a huge headache16:42:25
@emilazy:matrix.orgemilypick a format that's rigid by design or at least has a canonical format rigidly specified in the same spec rather than being something people have made 100 canonical versions of16:42:54
@emilazy:matrix.orgemilyit's a huge footgun, everyone who uses JSON in a cryptographic context gets bitten by this eventually. Matrix included iirc :)16:43:17
@roberthensing:matrix.orgroberthhmm ok. Something human readable would be great (and something not ATerm)16:45:17
@emilazy:matrix.orgemily

human-readable can actually be a drawback for formats specifically designed to be non-malleable, precisely because they invite opening in a text editor and appending some keys in whatever order.

fwiw, https://preserves.dev/ is well-designed, has a superset of JSON types, and has both a textual format and a binary format with a rigidly-defined canonical representation for the latter. however it's also a bit obscure and won't have as wide library support as alternatives so I can understand not going with it. the Spritely/Agoric/Cap'n Proto standardization effort OCapN uses it as Syrup, which is a separate canonical-but-made-up-of-printable-characters serialization of it https://github.com/ocapn/syrup#pseudo-specification.

more well-known alternatives:

  • deterministic CBOR serialization, buuuut there are like three versions of it so caveat emptor https://www.imperialviolet.org/2022/04/17/canonsofcbor.html
  • canonical s-expressions
  • bencode
  • …ASN.1 BER? 🙃

also, if you don't actually need a flexible/extensible format, defining your own very simple rigid serialization isn't a sin when you want cryptographic canonicity. (just make sure it's actually non-ambiguous and preferably can't be corrupted into another valid message by truncation, especially if you might be concatenating multiple messages.)

17:00:57
@emilazy:matrix.orgemily (total digression but Preserves is also used in the https://syndicate-lang.org/ ecosystem which I suspect John Ericson might find interesting) 17:03:05
@emilazy:matrix.orgemily(the Preserves textual format is also a superset of JSON, so in terms of being able to ingest things in a familiar format to then canonicalize it works well. but again many understandable reasons to pick something else, just giving an overview of the space as I see it)17:04:33
@roberthensing:matrix.orgroberth John Ericson: did we have an issue on this topic yet? Couldn't find one 17:06:35
@Ericson2314:matrix.orgJohn Ericson @roberthensing:matrix.org: for new drv format? 17:24:42
@Ericson2314:matrix.orgJohn EricsonNot actually sure 17:24:54
@Ericson2314:matrix.orgJohn EricsonAlso FYI https://github.com/facebook/buck2/issues/86617:25:21
@Ericson2314:matrix.orgJohn EricsonI sent to @edef1c too17:27:02
@puck:puck.moepuck
In reply to @roberthensing:matrix.org
John Ericson: I've suggested to treat the Nixpkgs "fix" for the CA placeholder issue (no storedir prefix) as a workaround as ca-derivations is experimental https://github.com/NixOS/nixpkgs/pull/386774#pullrequestreview-2660479310
builtins.placeholder has the same "issue", though i like them not being /nix/store-prefixed because it disambiguates that their format is unstable
17:31:38
@roberthensing:matrix.orgroberthThat one isn't experimental, so we'd need a very very good reason to change that anyway17:33:35
@emilazy:matrix.orgemilyI don't suppose Nix strings support NUL bytes in them so that we could properly separate the namespace from actual filesystem paths? in the same way abstract Unix sockets do17:33:47
@roberthensing:matrix.orgroberthAlso isn't user-handled as much as outputs are17:34:04
@roberthensing:matrix.orgroberthEvaluator strings are C strings. This could be changed to something with a length, but we're not in a hurry. I guess one of those separator control characters could serve the same role, but I feel that it'd be weird to do any of that (regardless of choice of byte value)17:35:50
@emilazy:matrix.orgemilyNUL is the only byte that is actually guaranteed to not be allowed on Linux anyway (though of course other platforms exist too)17:38:44
@emilazy:matrix.orgemilyso no advantage to anything else17:38:48
@naxdy:naxdy.orgNaxdy changed their profile picture.18:03:52
6 Mar 2025
@maikelfrias:matrix.org@maikelfrias:matrix.org joined the room.02:33:30

Show newer messages


Back to Room ListRoom Version: 6