Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: Establish VISION for "One Layer, All Storage" #5309

Merged
merged 15 commits into from
Nov 14, 2024
2 changes: 1 addition & 1 deletion .asf.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
# All configurations could be found here: https://github.com/apache/infrastructure-asfyaml/

github:
description: "Apache OpenDAL: access data freely."
description: "Apache OpenDAL: One Layer, All Storage."
homepage: https://opendal.apache.org
labels:
- rust
Expand Down
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
# Apache OpenDAL™: *Access Data Freely*
# Apache OpenDAL™: *One Layer, All Storage.*

[![](https://img.shields.io/github/discussions/apache/opendal)](https://github.com/apache/opendal/discussions)
[![](https://img.shields.io/discord/1081052318650339399?logo=discord&label=discord)](https://opendal.apache.org/discord)

OpenDAL offers a unified data access layer, empowering users to seamlessly and efficiently retrieve data from diverse storage services. Our goal is to deliver a comprehensive solution for any languages, methods, integrations, and services.
OpenDAL is an Open Data Access Layer that enables seamless interaction with diverse storage services.

OpenDAL's development is guided by its vision of **One Layer, All Storage** and its core principles: **Open Community**, **Solid Foundation**, **Fast Access**, **Object Storage First**, and **Extensible Architecture**. Read the explained vision at [OpenDAL Vision](https://opendal.apache.org/docs/vision).

<img src="https://opendal.apache.org/img/architectural.png" alt="OpenDAL Architectural" width="61.8%" />

Expand Down
5 changes: 3 additions & 2 deletions core/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,9 @@
)]
#![cfg_attr(docsrs, feature(doc_auto_cfg))]

//! Apache OpenDAL™ is a data access layer that allows users to easily and
//! efficiently retrieve data from various storage services in a unified way.
//! Apache OpenDAL™ is an Open Data Access Layer that enables seamless interaction with diverse storage services.
//!
//! OpenDAL's development is guided by its vision of **One Layer, All Storage** and its core principles: **Open Community**, **Solid Foundation**, **Fast Access**, **Object Storage First**, and **Extensible Architecture**. Read the explained vision at [OpenDAL Vision](https://opendal.apache.org/docs/vision).
//!
//! # Quick Start
//!
Expand Down
12 changes: 6 additions & 6 deletions website/DEPENDENCIES.node.csv
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
"module name","license","repository"
"@docusaurus/core@3.4.0","MIT","https://github.com/facebook/docusaurus"
"@docusaurus/plugin-client-redirects@3.4.0","MIT","https://github.com/facebook/docusaurus"
"@docusaurus/preset-classic@3.4.0","MIT","https://github.com/facebook/docusaurus"
"@mdx-js/react@3.0.1","MIT","https://github.com/mdx-js/mdx"
"@docusaurus/core@3.6.1","MIT","https://github.com/facebook/docusaurus"
"@docusaurus/plugin-client-redirects@3.6.1","MIT","https://github.com/facebook/docusaurus"
"@docusaurus/preset-classic@3.6.1","MIT","https://github.com/facebook/docusaurus"
"@mdx-js/react@3.1.0","MIT","https://github.com/mdx-js/mdx"
"[email protected]","MIT","https://github.com/lukeed/clsx"
"docusaurus-lunr-search@3.4.0","MIT","https://github.com/lelouch77/docusaurus-lunr-search"
"docusaurus-lunr-search@3.5.0","MIT","https://github.com/lelouch77/docusaurus-lunr-search"
"[email protected]","MIT","https://github.com/gabrielcsapo/docusaurus-plugin-image-zoom"
"[email protected]","MIT","https://github.com/olivernn/lunr.js"
"[email protected]","MIT","https://github.com/FormidableLabs/prism-react-renderer"
"[email protected]","MIT","https://github.com/facebook/react"
"[email protected]","MIT","https://github.com/facebook/react"
"[email protected].2","ISC","https://github.com/npm/node-semver"
"[email protected].3","ISC","https://github.com/npm/node-semver"
2 changes: 1 addition & 1 deletion website/docs/binding-java.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: Java API
sidebar_position: 4
sidebar_position: 5
---

Read the nightly version of Java API docs at [here](pathname:///docs/java/).
Expand Down
2 changes: 1 addition & 1 deletion website/docs/binding-nodejs.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: Node.js API
sidebar_position: 6
sidebar_position: 7
---

Read the nightly version of Node.js API docs at [here](pathname:///docs/nodejs/).
Expand Down
2 changes: 1 addition & 1 deletion website/docs/binding-python.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: Python API
sidebar_position: 5
sidebar_position: 6
---

Read the nightly version of Python API docs at [here](pathname:///docs/python/).
Expand Down
2 changes: 1 addition & 1 deletion website/docs/dav-server.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: WebDAV Integration
sidebar_position: 8
sidebar_position: 9
---

Read the nightly version of the API docs at [here](pathname:///docs/dav-server-opendalfs/dav_server_opendalfs).
Expand Down
2 changes: 1 addition & 1 deletion website/docs/object-store.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: object_store Integration
sidebar_position: 7
sidebar_position: 8
---

Read the nightly version of the API docs at [here](pathname:///docs/object-store-opendal/object_store_opendal).
Expand Down
62 changes: 2 additions & 60 deletions website/docs/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,70 +5,12 @@ sidebar_position: 1

# Welcome to Apache OpenDAL™

OpenDAL represents **Open** **D**ata **A**ccess **L**ayer. Our vision is to **access data freely**.
OpenDAL represents **Open** **D**ata **A**ccess **L**ayer. Our vision is [**One Layer, All Storage.**](./vision.md)

## What does OpenDAL do?

![](https://user-images.githubusercontent.com/5351546/222356748-14276998-501b-4d2a-9b09-b8cff3018204.png)
![](https://opendal.apache.org/img/architectural.png)

## Getting started

See the page for quick start with multiple languages: [Quickstart](quickstart.md).

## Why OpenDAL?

The vision of OpenDAL is access data freely, where "free" refers to four essential aspects:

### 1. Free from services

OpenDAL must enable users to access various storage services ranging from `s3` to `dropbox` via its own native API. It should provide a unified API for accessing all these services.

For example, we DO

- Add support for [Google Drive](https://www.google.com/drive/): It allows users to access and manage their data on the [Google Drive](https://www.google.com/drive/).
- Add support for [Object Storage Service (OSS)](https://www.alibabacloud.com/product/object-storage-service) via native API: Users can utilize Aliyun's RAM support.
- Add support for [supabase storage](https://supabase.com/docs/guides/storage): Users can visit `supabase storage` now!

while we DO NOT

- Add support for [Google Cloud Storage (GCS)](https://cloud.google.com/storage) via [XML API](https://cloud.google.com/storage/docs/xml-api/overview): [GCS](https://cloud.google.com/storage) has native [JSON API](https://cloud.google.com/storage/docs/json_api) which is more powerful
- Add support for structural data in `MySQL/PostgreSQL`: We can treat a database as a simple key-value store, but we can't support unified access of structural data.

### 2. Free from implementations

OpenDAL needs to separate the various implementation details of services and enables users to write identical logic for different services.

For example, we DO

- Add a new capability to indicate whether `presign` is supported: Users can now write logic based on the `can_presign` option.
- Add a `default_storage_class` configuration for the S3 service: Configuration is specific to the S3 service.
- Add an option for `content_type` in the `write` operation: It aligns with HTTP standards.

while we DO NOT

- Add a new option in read for `storage_class`: As different services could have varying values for this parameter.

### 3. Free to integrate

OpenDAL needs to be integrated with different systems.

For example, we DO

- Add Python binding: Python programmers can use OpenDAL.
- Add object_store integration: `object_store` users can adopt OpenDAL.

### 4. Free of cost

OpenDAL needs to implement features in a zero-cost way which means:

- Users don't need to pay costs for unused features.
- Users cannot write better implementation for used features.

For example, we DO

- Add `layer` support: Users can add logging/metrics/tracing in zero cost way.
- Implement `seek` for Reader: Users cannot write better `seek` support, they all need to pay the same cost.

we DO NOT

- Add `Arc` for metadata: Users may only need to use metadata once and never clone it. For those who do want this feature, they can add `Arc` themselves.
2 changes: 1 addition & 1 deletion website/docs/quickstart.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: Quickstart
sidebar_position: 2
sidebar_position: 3
---

Apache OpenDAL™ can be easily integrated into different software with its Rust core and multilingual bindings.
Expand Down
2 changes: 1 addition & 1 deletion website/docs/rust-core.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: Rust Core
sidebar_position: 3
sidebar_position: 4
---

Read the nightly version of Rust API docs at [here](pathname:///docs/rust/opendal/).
Expand Down
122 changes: 122 additions & 0 deletions website/docs/vision.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
---
title: Vision
sidebar_label: Vision
sidebar_position: 2
---

## Charter

**One Layer, All Storage.**

## Principles

Principles are guiding principles. They guide how decisions are made for the whole project. Ideally, we do all of them all the time. In some cases, though, we may be forced to decide between slightly penalizing one goal or another. In that case, we tend to support those goals that come earlier in the list over those that come later (but every case is different).

### 0. Open Community

OpenDAL SHOULD be an **open** storage library.

OpenDAL is an ASF project governed by the OpenDAL PMC. At ASF, we believe in "Community Over Code" and adhere to [the Apache Way](https://www.apache.org/theapacheway/). We aim to develop OpenDAL to meet the needs of our community. We do not maintain private versions or include features that aren't useful to others.

For example, OpenDAL prefers to have clear and readable code, as this allows more people in the community to join the development.

### 1. Solid Foundation
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

-1 for Solid Foundation, as mentioned in #5301 (reply in thread)

IMO such a tenet is too big, hollow and subjective to provide guidance meaning and be constructive: no one will ever want to uncarefully build unsolid, untrustworthy software. It is self-evident to me that don't need to be told.

I propose the following alternatives:

  • Well-defined Behavior
  • Or Simply remove this one

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no one will ever want to uncarefully build unsolid, untrustworthy software. It is self-evident to me that don't need to be told.

This is true. The closest comparison I can think of is the set of safety rules for flying a plane. No one wants the plane to crash, be damaged, or get lost, but that does happen. This principle exists to guide our development so that we don't make changes that lead us off track.

IMO such a tenet is too big, hollow and subjective to provide guidance meaning and be constructive

Yes, I agree that "solid foundation" is somewhat a big word. I'm open to better alternatives.

Well-defined Behavior

This phrase doesn't convey what we want in these areas.

Or Simply remove this one

Unfortunately, I believe we need to emphasize this area. Removing this one might leave our principles incomplete. I still suggest to use solid foundation if we don't have better one.


OpenDAL SHOULD be a **solid** storage library.

OpenDAL is a solid foundation of user projects that users can trust OpenDAL to perform operations on real-world storage services. OpenDAL SHOULD always focus on building a Solid Foundation.

For example, OpenDAL performs additional error checks for AWS S3 complete multipart operations, as S3 may return an error in response with a 200 status code, even though this may add extra costs that conflict with "Fast Access.”

### 2. Fast Access

OpenDAL SHOULD be a **fast** storage library.

Its fast access ensures that OpenDAL implements storage support with zero overhead. Users can integrate with OpenDAL without concerns about additional costs. OpenDAL should be as fast as, or faster than, the SDK for any given storage service.

For example, OpenDAL uses Capability to describe the capabilities of different services and adopts native features of those services whenever possible.

### 3. Object Storage First

OpenDAL SHOULD be an **object storage first** library.

OpenDAL does support all storage services, but it is usually optimized for modern storage services. At the time of writing, we can say OpenDAL is object storage first. When designing features, OpenDAL tends to prioritize optimization for object storage.

For example, OpenDAL's Buffer design is primarily optimized for HTTP-based services, helping to reduce extra allocation, in-memory copying, and memory usage.

### 4. Extensible Architecture

OpenDAL SHOULD be an extensible storage library.

OpenDAL can be extended to various languages, backends, and layers. Each is independent and does not depend on the others. Users can combine different layers, such as metrics, logging, tracing, and retry, and extend their own languages, backends, and layers.

For example, OpenDAL's core never relies on the behavior or dependency of a single layer. Users can stack as many layers as they want on a given operator.

## Use Cases

Who are typical OpenDAL *users*? How would they use OpenDAL?

### Infrastructure Builders

Examples:

- [Databend](https://github.com/databendlabs/databend)
- [RisingWave](https://github.com/risingwavelabs/risingwave)
- [GreptimeDB](https://github.com/GreptimeTeam/greptimedb)
- [Apache Iceberg Rust](https://github.com/apache/iceberg-rust)

Use Cases:

- Building storage systems like databases
- Developing data processing pipelines
- Creating backup and archive solutions

Primary Concerns:

- **Solid Foundation**: Need guaranteed consistency and predictability for storage operations
- **Fast Access**: Require minimal overhead and optimal performance
- *Why*: Infrastructure services demand both reliability and performance as foundational requirements

### Application Developers

Examples:

- [Sccache](https://github.com/mozilla/sccache)
- [Vector](https://github.com/vectordotdev/vector)
- [Rustic](https://github.com/rustic-rs/rustic)

Use Cases:

- Building end-user applications
- Developing CLI tools
- Creating web services

Primary Concerns:

- **Fast Access**: Need efficient integration and optimal performance
- **Object Storage First**: Benefit from optimizations for modern cloud storage
- *Why*: Modern applications commonly use object storage and require responsive performance

### Platform Developers

Examples:

- [Pants](https://github.com/pantsbuild/pants)
- [Zino](https://github.com/zino-rs/zino)
- [Shuttle](https://github.com/shuttle-hq/shuttle)

Use Cases:

- Building AI/ML platforms
- Developing cloud services
- Creating developer tools

Primary Concerns:

- **Extensible Architecture**: Need to customize and extend storage capabilities
- **Solid Foundation**: Require dependable storage operations
- *Why*: Platforms need flexibility to adapt to various use cases while maintaining reliability

---

*This documentation is inpisred a lot by [hyper’s VISION document](https://hyper.rs/contrib/vision/).*
Loading
Loading