Hosting Providers control their offering #1282
Labels
No labels
ambition
application-offering
ambition
configure-applications
ambition
front-end
ambition/install-applications
ambition
security
ambition
switch-host
ambition
update-applications
ambition
user-management
blocked
component
api-service
component
fediversity-panel
component
nixops4
documentation
points
0
points
0.5
points
1
points
13
points
2
points
21
points
3
points
34
points
5
points
55
points
8
points
infinite
productisation
project-management
question
role
application-developer
role
application-operator
role
hosting-provider
role
maintainer
security
technical debt
testing
type
bug
type
deliverable
type
key-result
type
objective
type
task
type
unclear
type
user-story
user experience
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Blocks
Depends on
#1189 data model extensible for external consumers
fediversity/fediversity
#2038 many hosting providers
fediversity/fediversity
#1879 operator may choose between comparable software options
fediversity/fediversity
#1885 hosting provider may exclude applications
fediversity/fediversity
Reference
fediversity/fediversity#1282
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
As a Hosting Provider,
I want to be able to control what Applications I offer,
so that I can guarantee the quality of my service and attract Operators by offering more/different Applications.
A Hosting Provider might not want to offer a Matrix Application, because their hardware is not performant enough with Synapse. They might want to offer Matrix Applications but using different server implementations, configured with different NixOS modules. Or they might want to offer a Mattermost Application, something not currently planned as a supported Application for Fediversity, to attract Operators.
Since Fediversity is an open source project, all of this is possible through forking the project. That comes with a cost though. Any patches may need to be altered whenever Fediversity releases a new version.
We should offer configuration options that allow Hosting Providers to provide all the information Fediversity needs in order to deploy an Application.
This addresses point 2 of the discussion here.
i linked this as #1189's sub-ticket focused on applications.
so, there would seem to be different ways to go around this.
HOSTING_ENV_CONFIG)core/'s attributes, as introduced for the environment entity in #1202 (as part of #1189 had yet to be extended to idiomatically support theapplicationentity)i updated #1189 w.r.t. applications: so far added like how api/panel applications are injected despite lacking from core, tho this mechanism seems hacky (custom helpers) rather than idiomatic data model extension still
I'm answering parts of the comments on #1288 here, because I think it's closer
to the topic of this issue.
@kiara wrote in #1288 (comment):
So, migrations are a complicated beast, giving Hosting Providers the power to
implement their own Applications complicates that. But, consider the
alternative, we don't make it possible to add/remove Applications easily, the
Hosting Providers business interests don't change, they want to (not) offer
some Application, so they fork Fediversity and remove or implement the
Application. Now we're in a similar situation regarding migrations, except
they're not even running the same revision of Fediversity. That sounds strictly
more difficult to deal with to me.
The code that is necessary to facilitate migrations would be part of the
contract of what implementing an Application means. Granted, incentives for
Hosting Providers to implement migrations properly may not be high but if they
fork Fediversity there's also no reason to implement them right.
At the same time I think we need to consider partial/per-Application migrations
anyway. I might be happy hosting my e-mail and a Matrix server at a small host
that I know personally but they just don't seem to have the capacity to host my
Peertube instance smoothly. I'd want to migrate just the Peertube instance to a
bigger Hosting Provider.
Being able to migrate each Application individually also allows doing a gradual
migration, to build trust in the new Hosting Provider. Or a migration to a
Hosting Provider that can handle everything except for Peertube, which you'd
maintain at your current Hosting Provider. A full migration would presumably be
easy to implement on top of per-Application migrations.
The following questions stray a bit from this issue, I think they're really
addressing point 1 of fediversity/module-schema#12 but I don't have a better
place for them.
@kiara wrote in #1288 (comment):
How does the revision being in VCS help with determining whether something is
an update? Maybe you're assuming Fediversity's VCS history has both revisions
involved and we can pick the more recent one as the one to update to? What
about a fork with a divergent history of Nixpkgs revisions?
@kiara wrote in #1288 (comment):
I'm not sure I follow. If Hosting Providers determine what Nixpkgs revision to
use then they decide when to use another one, which would presumably be an
update.
they don't have to fork for this: as per
core.lib.render(implemented part of #1189) one may make a downstream distribution, as we do today (core->api->panel) - no forking involved, necessarily.so while some code may need to stay aligned at some point on update, this doesn't just imply hundreds of merge conflicts, per se - we'd expose clear boundaries.
this may merit its own ticket
i would technically agree here, tho only because partial ones are probably are probably more involved than the full thing
what did you mean by "whether something is an update"?
further, what did you mean by 'both versions'? this to me implies one would know future versions to update to (upfront?).
so our current updating model (
module_source, shown at the bottom ofpanel/'s operator form) uses fetchtree objects, like how flakes track dependencies, using objects like:(except in our case pointing to our fediversity repo today.)
the point there is, as long as you know the location (
rev) and a direction (ref), you don't just know where you are today, you've also specified a direction the deployment can update in - just like how flakes/npins updates for a dep could get you to a newer revision on your dependency (whether a new release, tag, or a commit on some branch).this then also specifies the current responsibility model over a deployment: unless change somehow (e.g. fork, downstream distribution - tho friendly mechanisms to change the module source are todo), updates would follow what is published at the specified repo branch.
as long as the target revision there is at least as recent (if not resource versions too), then that should work, i think: any intermediate versions could just get skipped, if i understand the scenario you're describing correctly.
right so i think what i'm describing is a submitted deployment providing all the info declaratively describing where it is and can go, while you're describing (nixpkgs) versions as maybe somewhat more of a separate property of deployments, rather than the whole thing being kind of self-contained