-
Notifications
You must be signed in to change notification settings - Fork 182
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
9f07507
commit 7b55a59
Showing
3 changed files
with
53 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
This file was deleted.
Oops, something went wrong.
7b55a59
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Rust Benchmark
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.