Skip to main content

Introduction

Fury is a blazing fast multi-language serialization framework powered by jit(just-in-time compilation) and zero-copy.

Protocols

Different scenarios have different serialization requirements. Fury designed and implemented multiple binary protocols for those requirements:

  • Cross-language object graph protocol:
    • Cross-language serialize any object automatically, no need for IDL definition, schema compilation and object to/from protocol conversion.
    • Support shared reference and circular reference, no duplicate data or recursion error.
    • Support object polymorphism.
  • Native java/python object graph protocol: highly-optimized based on type system of the language.
  • Row format protocol: a cache-friendly binary random access format, supports skipping serialization and partial serialization, and can convert to column-format automatically.

New protocols can be added easily based on fury existing buffer, encoding, meta, codegen and other capabilities. All of those share same codebase, and the optimization for one protocol can be reused by another protocol.

Compatibility

Schema Compatibility

Fury java object graph serialization support class schema forward/backward compatibility. The serialization peer and deserialization peer can add/delete fields independently.

We plan to add support cross-language serialization after meta compression are finished.

Binary Compatibility

We are still improving our protocols, binary compatibility are not ensured between fury releases for now. Please shade fury if you will upgrade fury in the future.

Binary compatibility will be ensured before fury 1.0.

Security

Static serialization such as row format are secure by nature. But dynamic object graph serialization supports deserialize unregistered types, which can introduce security risks.

For example, the deserialization may invoke init constructor or equals/hashCode method, if the method body contains malicious code, the system will be at risks.

Fury provides a class registration mode option and enabled by default for this protocol, which allows deserializing trusted registered types or built-in types only for security.

Fury provides a class registration option and enabled by default for such protocols, which allows only deserializing trusted registered types or built-in types. Do not disable class registration or class registration checks unless you can ensure your environment is indeed secure. We are not responsible for security if you disabled the class registration option.

RoadMap

  • Meta compression, auto meta sharing and cross-language schema compatibility.
  • AOT Framework for c++/golang to generate code statically.
  • C++/Rust object graph serialization support
  • Golang/Rust/NodeJS row format support
  • ProtoBuffer compatibility support
  • Protocols for features and knowledge graph serialization
  • Continuously improve our serialization infrastructure for any new protocols

How to Contribute

Please read the CONTRIBUTING guide for instructions on how to contribute.