GrammaTech / gtirb

Intermediate Representation for Binary analysis and transformation
https://grammatech.github.io/gtirb/
Other
305 stars 36 forks source link

Question: Is there a Design Reason for Using Protobuf Over Cap'n'Proto? #45

Closed larkwiot closed 2 years ago

larkwiot commented 2 years ago

Hello!

Just wondering if Cap'n'proto was considered, and if so why protobuf was chosen over it? Assuming there is no design limitation for it, I would like to add support for it to GTIRB. Is there anywhere in particular you all would recommend I start in the codebase to accomplish that?

eschulte commented 2 years ago

We did look at Cap'n'proto but as I recall we went with Protobuf because Protobuf is more widely supported (e.g., obvious libraries exist in every language for which we have an API: CPP, Python, Common-Lisp, Java). It is possible that Cap'n'proto is as widely supported, but we didn't realize at the time.

If there are concrete benefits to Cap'n'proto (e.g., one major limitation we've felt with Protobuf is the inability to decode only part of a GTIRB file -- sometimes we only want say one AuxData table but we're stuck processing an entire large GTIRB file) and the support is as broad as Protobuf then I think we're open to considering making this switch, although it would be a huge disruptive switch.

larkwiot commented 2 years ago

We did look at Cap'n'proto but as I recall we went with Protobuf because Protobuf is more widely supported (e.g., obvious libraries exist in every language for which we have an API: CPP, Python, Common-Lisp, Java). It is possible that Cap'n'proto is as widely supported, but we didn't realize at the time.

If there are concrete benefits to Cap'n'proto (e.g., one major limitation we've felt with Protobuf is the inability to decode only part of a GTIRB file -- sometimes we only want say one AuxData table but we're stuck processing an entire large GTIRB file) and the support is as broad as Protobuf then I think we're open to considering making this switch, although it would be a huge disruptive switch.

This is really helpful, thanks!