Skip to content

Commit

Permalink
Add deprecation notice.
Browse files Browse the repository at this point in the history
  • Loading branch information
samscott89 committed Dec 18, 2023
1 parent 9f07507 commit 7b55a59
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 7 deletions.
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# Deprecated

We have deprecated the legacy Oso open source library. We have plans for the next open source release and we’re looking forward to getting feedback from the community leading up to that point (please reach out to us in the Slack #help channel). In the meantime, if you’re happy using the Oso open source library now, nothing needs to change – i.e., we are not end-of-lifing (EOL) the library and we’ll continue to provide support and critical bug fixes. More context: [here](https://www.osohq.com/docs/oss/getting-started/deprecation.html).

# Oso

[![Development][badge-ci]][badge-ci-link]
Expand All @@ -15,6 +19,7 @@
Oso is a batteries-included framework for building authorization in your application.

With Oso, you can:

- **Model**: Set up common permissions patterns like role-based access control (RBAC) and relationships using Oso’s built-in primitives. Extend them however you need with Oso’s declarative policy language, Polar.
- **Filter**: Go beyond yes/no authorization questions. Implement authorization over collections too - e.g., “Show me only the records that Juno can see.”
- **Test**: Write unit tests over your authorization logic now that you have a single interface for it. Use the Oso debugger or REPL to track down unexpected behavior.
Expand Down
48 changes: 48 additions & 0 deletions docs/content/any/getting-started/deprecation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
---
title: Deprecating the Oso Open Source Library
weight: 1
any: true
hideContents: false
draft: false
---

# Deprecating the Oso Open Source Library

**Date: 2023/12/18**

Today we’re deprecating the legacy Oso open source library. We have plans for the next open source release and we’re looking forward to getting feedback from the community leading up to that point. In the meantime, if you’re happy using the Oso open source library now, nothing needs to change – i.e., we are not end-of-lifing (EOL) the library and we’ll continue to provide support and critical bug fixes.

This post describes how we got here, what this change means for existing users, and what you can expect from Oso in the future. If you have questions, you can always reach out to us in our community Slack.

### How we got here

We started working on the Oso library in 2020. We believed that Polar could help developers with a piece of the authorization problem, and we turned out to be right. We worked with thousands of users to make Polar more intuitive and to solve some of the thornier problems in authorization, like data filtering.

Through this process, we learned a ton about what was good and not so good about the Oso library. Polar – this was good! We have continued to lean into this. But over time we continued to see two main challenges with the implementation of the library:

1. API boundary
1. The Oso library centers around the [Foreign Function Interface (FFI)](https://doc.rust-lang.org/nomicon/ffi.html).
2. While convenient in some ways, this abstraction has proved to be more confusing than useful.
3. The upshot is a fuzzy API surface area for Oso, which created footguns for our users in setup and when debugging.
2. Performance
1. Since the Oso library doesn’t store any data itself, it relies on your existing model (by definition)
2. This led to unpredictable performance, especially for data filtering use cases
3. The hooks into ORMs (for `sqlalchemy-oso` and `django-oso`) made it easier to set up the Oso library, but querying by way of the ORM also contributed to these performance challenges

Based on feedback from our users, we decided to build Oso Cloud to solve a set of problems that the library doesn’t solve – authorization for microservices. When we built Oso cloud, we wanted to apply what we’ve learned from the library’s API boundary and performance issues. This is what gave rise to the Facts API and Facts data model, respectively. To make this happen, we had a choice: try to refactor the existing library, or start from a clean slate. We chose the latter, which enabled us to leave our technical debt behind. This created a new challenge: ever since that point, we’ve had 2 codebases, 2 sets of libraries, and 2 documentation sites.

This is neither good for our users nor good for us. It’s made it harder for us to maintain the Oso library, to build new features for it, and to support it. We want to fix that, but it’s going to take some time.

### What we’re doing and what it means for users

Our first step is to deprecate the Oso library. We’ve also moved the Oso library documentation to https://www.osohq.com/docs/oss. The implications for most existing users are: nothing. That is, if the Oso library is working for you, there’s no action required at the moment.

Our plan is to start open sourcing core components of the latest Oso implementation from here. This will take time – we plan to do this over multiple releases. While the first things we open source will not be suitable for all use cases, we’re confident that the core architectural changes will be well worth it for the developer community. And over time, we plan to reach use case parity with what exists today.

In the meantime, we’re not going anywhere. We’re committed to making critical bug fixes and providing best-efforts support if you’re having issues. We’re not planning to end of life (EOL) the Oso library for at least 12 months. And once we have a suitable replacement for the Oso library, we’ll provide documentation on how to migrate, as well as make ourselves available via Slack and Zoom, as always.

### Oso’s open source future

We know that deprecating software you’re using is inconvenient at best, but we believe this step is the best way to set up Oso and the broader development community for the long-term.

We believe in the power of open source. This is the first step towards delivering a better and more sustainable open source Oso. While we aren’t sharing specifics on those just yet, we’re happy to share more details and hear your feedback 1x1. In particular, if there are areas you’d be interested to learn about and/or contribute, we’d love to hear it! And more generally, if you have any questions or feedback, feel free to reach out to us in Slack.
7 changes: 0 additions & 7 deletions docs/content/any/project/old-docs.md

This file was deleted.

1 comment on commit 7b55a59

@github-actions
Copy link

Choose a reason for hiding this comment

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

Rust Benchmark

Benchmark suite Current: 7b55a59 Previous: 9f07507 Ratio
rust_get_attribute 29112 ns/iter (± 1670) 28502 ns/iter (± 992) 1.02
n_plus_one/100 1525848 ns/iter (± 30067) 1541884 ns/iter (± 23076) 0.99
n_plus_one/500 7383589 ns/iter (± 90204) 7491016 ns/iter (± 56534) 0.99
n_plus_one/1000 14661229 ns/iter (± 78008) 14841049 ns/iter (± 89963) 0.99
unify_once 624 ns/iter (± 1146) 629 ns/iter (± 280) 0.99
unify_twice 1707 ns/iter (± 25) 1721 ns/iter (± 75) 0.99
many_rules 38288 ns/iter (± 892) 38451 ns/iter (± 1181) 1.00
fib/5 347203 ns/iter (± 4107) 343854 ns/iter (± 4901) 1.01
prime/3 10475 ns/iter (± 369) 10245 ns/iter (± 408) 1.02
prime/23 10463 ns/iter (± 409) 10225 ns/iter (± 381) 1.02
prime/43 10480 ns/iter (± 387) 10234 ns/iter (± 675) 1.02
prime/83 10465 ns/iter (± 370) 10226 ns/iter (± 443) 1.02
prime/255 9348 ns/iter (± 384) 9224 ns/iter (± 338) 1.01
indexed/100 3443 ns/iter (± 408) 3427 ns/iter (± 360) 1.00
indexed/500 3972 ns/iter (± 1075) 3886 ns/iter (± 1032) 1.02
indexed/1000 4367 ns/iter (± 205) 4307 ns/iter (± 213) 1.01
indexed/10000 10300 ns/iter (± 1195) 7160 ns/iter (± 901) 1.44
not 3959 ns/iter (± 48) 3954 ns/iter (± 873) 1.00
double_not 8408 ns/iter (± 149) 8584 ns/iter (± 168) 0.98
De_Morgan_not 5412 ns/iter (± 89) 5405 ns/iter (± 87) 1.00
load_policy 697378 ns/iter (± 4902) 691766 ns/iter (± 3105) 1.01
partial_and/1 20893 ns/iter (± 572) 20796 ns/iter (± 654) 1.00
partial_and/5 68453 ns/iter (± 2049) 68684 ns/iter (± 1893) 1.00
partial_and/10 129035 ns/iter (± 3927) 129009 ns/iter (± 3565) 1.00
partial_and/20 269522 ns/iter (± 6440) 270651 ns/iter (± 8476) 1.00
partial_and/40 589905 ns/iter (± 7556) 590556 ns/iter (± 8517) 1.00
partial_and/80 1366519 ns/iter (± 12004) 1367706 ns/iter (± 12809) 1.00
partial_and/100 1815267 ns/iter (± 8963) 1820600 ns/iter (± 121936) 1.00
partial_rule_depth/1 62347 ns/iter (± 2250) 62242 ns/iter (± 2605) 1.00
partial_rule_depth/5 214488 ns/iter (± 5728) 215284 ns/iter (± 5721) 1.00
partial_rule_depth/10 484272 ns/iter (± 10098) 486410 ns/iter (± 9534) 1.00
partial_rule_depth/20 1379811 ns/iter (± 16174) 1387108 ns/iter (± 24385) 0.99
partial_rule_depth/40 4910960 ns/iter (± 25224) 4971434 ns/iter (± 240346) 0.99
partial_rule_depth/80 27141254 ns/iter (± 282770) 27624841 ns/iter (± 241053) 0.98
partial_rule_depth/100 49220520 ns/iter (± 672095) 49917009 ns/iter (± 430891) 0.99

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.