Compare commits

..

234 commits

Author SHA1 Message Date
0b057afe0d feat(forgejo): added readable markdown for the repo-org model of forgejo 2025-06-30 09:22:21 +02:00
19c30cfa51 doc(forgejo): WiP ... added forgejo documentation for 2nd level operation 2025-06-29 16:54:29 +02:00
ea93b7360d doc(infra): added more visualiztion to DevFW/forgejo-pm#30 2025-06-29 16:50:05 +02:00
0ba1810a56 doc(arch): added proposal for new infrastructure provisioning hierarchy 2025-06-28 15:54:18 +02:00
d804682615 fix(arch): there is only Forgejo to be seen in central cluster 2025-06-23 08:30:45 +02:00
9a11ad277c doc(architecture): added OTC FaaS deployment diagram 2025-06-23 08:15:01 +02:00
853470845e Merge branch 'development' 2025-06-22 10:19:23 +02:00
2df0813768 doc(project): next wbs increment, roles are aligned in solution track 2025-06-20 16:46:01 +02:00
2e1f96d256 doc(project): WiP initial work breakdown structure / ressource estimation based on the capability map 2025-06-20 01:28:02 +02:00
3192a5b133 doc(arch): Added MMS SECO support request communication 2025-06-19 06:53:09 +00:00
74b5853cbd feat(prototype-faas): as discussed in the mob - we want already to start with the runner concept 2025-06-15 20:39:25 +02:00
6111c102f5 doc(arch): next step high level arch description 2025-06-15 20:34:02 +02:00
c8e09600b6 doc(project): removed appendix 2025-06-15 18:15:24 +00:00
6dd596f23b doc(arch): added mob-aligned deployment plan for 30.06.25 from today 2025-06-12 12:45:41 +02:00
246d88bd63 doc(roadmap): WiP added initial roadmap planning for Prototype-Forgejo-ProjectManagement 2025-06-11 10:45:37 +02:00
94686eae90 refactor(roadmap): rename MVP1-12-OTC to Prototype-Forgejo-as-a-Service 2025-06-11 10:41:17 +02:00
7db2016add doc(arch): added high level arch from powerpoint 'solution track' 2025-06-10 15:39:24 +02:00
eca9c6cb57 feat(product-roadmap): after alignement with waldemar 2025-06-10 12:51:27 +02:00
27f4eb68db doc(faas): added milestone faas workbreakdown structure (as draft) 2025-06-09 23:53:28 +02:00
e59740dcbd refactor(faas-arch): improved doc 2025-06-09 23:48:09 +02:00
056b3f7517 doc(faas): ported some technical and planning artifacts from lucid to edp-doc 2025-06-08 17:45:19 +02:00
2919231f8b Merge branch 'main' into feature/product-management 2025-06-08 13:40:51 +02:00
eea07c97cb Merge branch 'main' into development 2025-06-08 13:32:18 +02:00
666d70ea81 doc(arch): added an analysis of forgejo OSS release timeline and the impact of Forgejo's GPL licencing on our EDP Frontend Portal (-Frontend) 2025-06-08 13:31:14 +02:00
c6f54040d6 refactor(arch): renamed file 2025-06-05 14:01:15 +02:00
bc3024d023 doc(arch): WiP - alignemnt with Portal-Frontend activity stream 2025-06-05 12:28:01 +02:00
5ebb61b0a4 doc(product-review): ex post - some notes of the product review of May 27th, 2025 2025-06-05 12:25:53 +02:00
d6e4421f10 doc(victoria-k8s-stack): WiP .... first steps of documentation of the components we have, se DevFW/infra-deploy#13 (comment) 2025-05-26 16:09:56 +02:00
a541850e7b doc(architecture): WiP added first idea of faas (forgejo-as-a-service) environments and build-edp-itself 2025-05-23 19:06:53 +02:00
45bf0dda0f refactor(mvp1-12-otc): created _assets dir 2025-05-23 19:05:29 +02:00
f6b2db2cdc feat(solution-track): added ideas created with chatGPT to structure the solution track's mobbing and developing progress 2025-05-18 16:30:52 +02:00
3fc3611493 refactor(c4): seperate view into view folder 2025-05-15 18:08:19 +02:00
7494ed9b06 doc(arch): added sketches of edp-otc presented in the review of 13.5.25 2025-05-15 10:13:06 +02:00
fbf1e860b3 doc(forgejo) : prepared docs for 4 methods for local setup and development with forgejo 2025-05-08 12:44:14 +02:00
d49d926c3c doc(forgejo): added some instructions for local run and development 2025-05-08 00:29:00 +02:00
c5dc6ce4ba refactor(techdoc): moved forgejo to product, moved design to decisions 2025-05-07 23:17:44 +02:00
06c4eb08fa refactor(c4): added infrastructureressource as deploymentNode, renamed models and views in hierarchical naming syntax 2025-05-07 11:10:12 +02:00
Bot
95cbf775f2 doc(arch): added c4 update to MVP1-12-OTC overview 2025-05-06 22:10:48 +02:00
ed04366494 doc(c4): added overarching otc deployment view 2025-05-06 21:53:46 +02:00
cf80000daf doc(c4): added deployment otc-edp-per-tenant 2025-05-06 20:19:15 +02:00
74171d38e2 doc(c4): finished view 'edp foundry central service' 2025-05-06 17:53:31 +02:00
1145dd88b8 doc(c4): added more containers and components, refactored forgejoActions to forgejoRunner and Workers 2025-05-06 17:03:29 +02:00
Bot
50f15faf99 chore(forgejo): KickOff/Onboarding with Michael 2025-05-06 15:06:34 +02:00
755ec09cb6 doc(c4): added initial otc views 2025-05-06 12:55:44 +02:00
223fbdb1b5 refactor(c4): renamed local deployment to edp-in-local-kind-cluster 2025-05-06 12:20:33 +02:00
79c9dfbcc3 refactor(c4): move deployment to the same level as model, split deployments-views to views 2025-05-06 12:14:10 +02:00
16701c9957 refactor(c4): refactored views into folders 2025-05-06 11:14:05 +02:00
1d13deac43 Merge branch 'adr-0002' into development 2025-05-06 10:44:04 +02:00
Bot
12080ceb9e doc(arch): WiP added some more Forgejo design/development links 2025-05-06 08:40:14 +02:00
Bot
38f2011697 doc(arch): WiP initially added some Forgejo design/development links 2025-05-06 07:57:39 +02:00
Bot
d88ef0650f Merge branch 'feature/mob-1-30.04.2025' into development 2025-05-06 07:52:35 +02:00
Bot
cfcf4ed67e doc(fs-forgejo-service): WiP - mob-1 stage 3: OTC ECS - do terraform 2025-04-30 17:22:33 +02:00
Bot
5e8bd691d6 doc(fs-forgejo-service): WiP - mob-1 stage 2: OTC ECS - create a VM and try to connect from th einternet by ssh 2025-04-30 14:46:01 +02:00
Bot
89b0a94b76 doc(fs-forgejo-service): WiP - mob-1 stage 1: OTC VPC 2025-04-30 13:46:20 +02:00
Bot
fec136b881 doc(arch): added MVP1-12-OTC 2025-04-24 18:36:21 +02:00
4ed3dc8d2a backstage update tutorial, part 2 2025-04-24 13:40:17 +02:00
97a09ce1b3 backstage update tutorial 2025-04-23 15:36:53 +02:00
2df3d0c120 doc(cicd): roadmap / issues in ci/cd 2025-04-11 10:40:34 +02:00
53b4cddad3 refactor(adr): moved 0002 proposal to correct folder 2025-04-10 13:48:43 +02:00
698d25648e docs: Added Proposal for ADR 0002 OpenBao as Identity Provider 2025-04-10 09:46:48 +02:00
1bf97759d6 Merge branch 'development' into likec4 2025-04-09 23:28:55 +02:00
aaaa5a100f Merge remote-tracking branch 'refs/remotes/origin/likec4' into likec4 2025-04-09 23:27:45 +02:00
c8695eb403 refactor(technical-documentation): first itration finished. can be pushed as mkdocs-awesome-pages-plugin is now implemented in backstage-edp 2025-04-09 23:25:31 +02:00
75a2ad1cfa Merge branch 'development' into feature/tech-doc-refactoring 2025-04-09 22:34:09 +02:00
70676f0bf8 feat(c4-arch): added kyverno, fixed developer -> git relation 2025-04-09 22:25:38 +02:00
39b9d4935f feat(c4-arch): added edp-as-orchestratir view 2025-04-09 22:25:38 +02:00
f882aa4159 refactor(c4-arch): one again forgejo refactored, to get single components in the developer-context-view 2025-04-09 22:25:38 +02:00
2d9276f73e feat(c4-arch): created edp-as.idp.view. added new elemenst api and garfana. refactored forgejo, it also contains git and collaboration. rmeoved repos from forgejo 2025-04-09 22:25:38 +02:00
d3e51c3777 fix(c4-devdays): removed typos 2025-04-09 22:25:38 +02:00
1c3d72ebb6 feat(c4-devday): slide 1 - developer landscape view 2025-04-09 22:25:38 +02:00
09e05c3d02 feat(c4-arch): added cicd-outerloop dynamic view 2025-04-09 22:25:38 +02:00
abeb011276 feat(c4-developer-scope): documentation of reached developer-landscape view 2025-04-09 22:25:38 +02:00
4cb5718193 refactor(c4-edp): extracted all components from edp as ectending models in single files 2025-04-09 22:25:38 +02:00
174f605106 refactor(c4): changed to models and views folders 2025-04-09 22:25:38 +02:00
884be568ab feat(c4-context): added/changed context of EDFoundry/EDP 2025-04-09 22:25:37 +02:00
d8a5101efb refactor(c4): created c4 folders, divided models and views into seperate files 2025-04-09 22:25:37 +02:00
a0c13075bb Make workflow source more explicit 2025-04-09 22:25:37 +02:00
bf26d48694 Added edpbuilder workflow 2025-04-09 22:25:37 +02:00
92203fdd18 Added argocd to comonent view 2025-04-09 22:25:37 +02:00
d38b710955 Added relation from argo to forgejo 2025-04-09 22:25:37 +02:00
51a312c226 Added Argocd to deployment view 2025-04-09 22:25:37 +02:00
5df918dd43 Added Spark Operator 2025-04-09 22:25:37 +02:00
2155fb281c Fixed deployment view for local deployments 2025-04-09 22:25:37 +02:00
834a4c21ea Added mailhog 2025-04-09 22:25:37 +02:00
50092a8a03 Added Fibonacci App 2025-04-09 22:25:37 +02:00
3bbd29b47a More tweaks to architecture diagrams 2025-04-09 22:25:37 +02:00
bc96681b7d chore(arch): projectmgmt likec4 model separated from arch models by projects
ref: https://likec4.dev/dsl/projects/#_top
2025-04-09 22:25:37 +02:00
f9a7d18df4 Added more models 2025-04-09 22:25:37 +02:00
9d757a7432 chore(arch): added devbox for likec4 cli 2025-04-09 22:25:37 +02:00
7437b22a08 Inital draft of architecture documentation 2025-04-09 22:25:37 +02:00
089273c038 doc(references): ex post added Humanitec annual platform reports https://humanitec.com/whitepapers 2025-04-09 12:37:14 +02:00
19b7917283 doc(references): added CDE white paper from https://cloudomation.com/whitepaper-en/cde-vendors-feature-comparison/ 2025-04-09 12:31:44 +02:00
ea6a32f3f0 feat(c4-arch): added kyverno, fixed developer -> git relation 2025-04-08 10:52:59 +02:00
5126d3bc6d feat(c4-arch): added edp-as-orchestratir view 2025-04-07 18:23:54 +02:00
03c0a41a96 refactor(c4-arch): one again forgejo refactored, to get single components in the developer-context-view 2025-04-07 17:45:35 +02:00
3d43f58742 feat(c4-arch): created edp-as.idp.view. added new elemenst api and garfana. refactored forgejo, it also contains git and collaboration. rmeoved repos from forgejo 2025-04-07 17:01:06 +02:00
e5d387ba3c fix(c4-devdays): removed typos 2025-04-07 15:16:55 +02:00
62faa70b61 feat(c4-devday): slide 1 - developer landscape view 2025-04-07 12:47:34 +02:00
c37cff7665 feat(c4-arch): added cicd-outerloop dynamic view 2025-04-07 00:28:30 +02:00
1192c02435 feat(c4-developer-scope): documentation of reached developer-landscape view 2025-04-06 18:44:15 +02:00
8c78105c07 refactor(c4-edp): extracted all components from edp as ectending models in single files 2025-04-06 18:43:29 +02:00
9a60bf2637 refactor(c4): changed to models and views folders 2025-04-06 17:43:43 +02:00
c57bc7ad18 feat(c4-context): added/changed context of EDFoundry/EDP 2025-04-06 17:13:31 +02:00
f3bf66d9e5 refactor(c4): created c4 folders, divided models and views into seperate files 2025-04-06 15:43:47 +02:00
f2e259254d doc(product-management): first analysis of production domains, actors, artifacts and workflows 2025-04-03 17:18:18 +02:00
65afaf047e refactor(techdoc): section technical documentation refactored. WiP - usage of plugin awesome-pages in test 2025-04-03 00:04:22 +02:00
08458fd7a7 Make workflow source more explicit 2025-04-02 18:25:34 +02:00
47c0d84d6e Added edpbuilder workflow 2025-04-02 18:19:51 +02:00
c81132d2d9 Added argocd to comonent view 2025-04-01 14:57:59 +02:00
0f1a0c6fc8 Added relation from argo to forgejo 2025-04-01 14:55:55 +02:00
b35cfd3864 Added Argocd to deployment view 2025-04-01 14:46:17 +02:00
37e8b23c87 Added Spark Operator 2025-04-01 14:38:42 +02:00
cd6234d321 Fixed deployment view for local deployments 2025-04-01 14:19:53 +02:00
6a2e3d4e16 Added mailhog 2025-04-01 13:15:21 +02:00
8dd577d64e Added Fibonacci App 2025-04-01 12:59:05 +02:00
1698d437e6 More tweaks to architecture diagrams 2025-04-01 09:59:22 +02:00
51729f6c84 chore(arch): projectmgmt likec4 model separated from arch models by projects
ref: https://likec4.dev/dsl/projects/#_top
2025-03-31 22:05:01 +02:00
6089a37669 Added more models 2025-03-31 16:27:38 +02:00
a03c971461 chore(arch): added devbox for likec4 cli 2025-03-31 14:43:11 +02:00
c3204dec79 Inital draft of architecture documentation 2025-03-31 14:27:02 +02:00
b623a09875 doc(local-development): added tldr; explanation in the network routing doc 2025-03-12 22:35:52 +00:00
2accc93181 doc(local-development): added host to docker network routing 2025-03-12 17:13:51 +01:00
7700428175 Merge branch 'development' into feature/ipceicis-2285-local-development-enablement 2025-03-12 15:56:29 +01:00
e16689a8fe Added proposed edpbuilder networking images 2025-03-11 08:57:10 +01:00
e0688a01c5 feat(docker-registry-caching-concept): added output from ipceicis-1766 into edp-doc 2025-03-10 14:45:51 +01:00
e8eeeddb4d Merge branch 'development' into feature/ipceicis-2285-local-development-enablement 2025-03-10 13:00:08 +01:00
7e2453b5d6 feat(local-dev): WiP - placeholder for roberts great mnetwork drawings and documentation 2025-03-10 12:45:09 +01:00
9a3f17ec02 feat(mkdocs): enable auto navigation by removing the nac section from mkdocs.yaml 2025-03-10 12:41:34 +01:00
223f873724 feat(mkdocs): enable auto navigation by removing the nac section from mkdocs.yaml 2025-03-10 12:24:46 +01:00
ad8bfcd1b3 grammar fix 2025-03-05 17:19:35 +01:00
f6b88a3d2f Report on the investigation of CNOE Backstage commit history added to the documentation 2025-02-21 18:07:44 +01:00
5410d9c877 Report on the investigation of CNOE Backstage commit history added to the documentation 2025-02-21 18:00:54 +01:00
956067da1f doc(solution-design-architecture): WiP ... added chart from Berlin 21st Jan 25 and corresponding team discussion from Jan 23rd 25 2025-02-04 14:05:11 +01:00
ff3a38e909 Merge remote-tracking branch 'refs/remotes/origin/development' into development 2025-01-23 09:37:52 +01:00
c7a58836a5 chore(devbox) 2025-01-23 09:37:48 +01:00
11da49f966 Merge pull request 'new OpenBao documentation' (#3) from Michal.Wrobel/edp-doc:development into development
Reviewed-on: DevFW-CICD/edp-doc#3
2025-01-15 15:15:54 +00:00
60cf9319c2 Merge branch 'development' into development 2025-01-15 15:11:41 +00:00
b67bba5b49 docs/user-documentation/openbao.md aktualisiert 2025-01-15 15:07:17 +00:00
85c51ff021 Merge pull request 'Added documentation for creation of a backstage template' (#2) from documentation-backstage-template-creation into development
Reviewed-on: DevFW-CICD/edp-doc#2
2025-01-15 15:00:34 +00:00
6427bff915 Added documentation for creation of a backstage template 2025-01-15 15:59:27 +01:00
69fb71b1e4 Added documentation for creation of a backstage template 2025-01-15 15:41:17 +01:00
c9f55115cf Added documentation for creation of a backstage template 2025-01-15 15:07:45 +01:00
90de5149ff docs/user-documentation/openbao.md aktualisiert
openbao new documentation draft
2025-01-09 15:00:52 +00:00
Stephan Lo
304fbdcdcb doc(contents): update user documentation outline and enhance technical documentation 2024-12-20 14:09:36 +01:00
Stephan Lo
df186af47c doc(README): update documentation structure and add getting started section 2024-12-20 13:53:22 +01:00
Stephan Lo
8d17325bcd doc(pos-doc): refactored README 2024-12-20 13:17:03 +01:00
Stephan Lo
13bd4343d9 Merge remote-tracking branch 'refs/remotes/origin/development' into development 2024-12-19 23:31:51 +01:00
Stephan Lo
910ea62dee feat(technical-doc): nearly finished this funny techdoc hugo to mkdocs conversion 2024-12-19 23:26:25 +01:00
Stephan Lo
dae67f17f1 doc(technical-documentation): Added the rest of technical documentation, WiP 2024-12-19 18:28:49 +01:00
d0e2f54eec styling fix 2024-12-19 15:49:40 +01:00
09ff335665 styling 2024-12-19 15:36:49 +01:00
534e6b4592 final styling 2024-12-19 15:32:24 +01:00
Stephan Lo
7d562ec04c Merge remote-tracking branch 'origin/development' into development 2024-12-19 15:25:01 +01:00
6ccc09dd38 unified styling 2024-12-19 15:16:21 +01:00
58e32c69d6 styling test 2024-12-19 15:05:45 +01:00
2dcccd7922 styling test 2024-12-19 15:04:01 +01:00
a6f81c1d02 styling test 2024-12-19 15:01:34 +01:00
401aefe420 argo.md styling 2024-12-19 15:00:40 +01:00
Stephan Lo
0a73aa0870 doc(technical-documentation): added first port of technical documentation 2024-12-19 14:52:10 +01:00
6f0ac1777a styling 2024-12-19 14:38:42 +01:00
Stephan Lo
866dca1655 doc(technical-documentation): initial port of technical documentation 2024-12-19 14:32:04 +01:00
Stephan Lo
22967405ab Merge remote-tracking branch 'origin/development' into development 2024-12-19 14:26:06 +01:00
Stephan Lo
eb4b56118a docs(technical-documentation): add initial structure and content for platform concepts 2024-12-19 12:16:25 +01:00
2c339a6b73 updates README 2024-12-19 12:02:11 +01:00
e694536136 readme styling 2024-12-19 11:57:53 +01:00
d256801640 Update docs/gettingstarted/user-documentation.md 2024-12-19 09:44:48 +00:00
5450db4d3d
docs(petclinic): some adjustments to the petclinic doc 2024-12-19 01:05:31 +01:00
559cff4d28
docs(petclinic): initial description of the petclinic template 2024-12-19 01:05:31 +01:00
61e63e56ef Added edpbuilder.md 2024-12-18 21:36:19 +01:00
a4f56a5c06 Added edpbuilder.md 2024-12-18 21:35:56 +01:00
ce7929af30 Updated grafana.md 2024-12-18 20:16:31 +01:00
602b64fe0b Updated keycloak.md 2024-12-18 19:53:37 +01:00
55f6d83606 updates docu link (OSC) 2024-12-18 17:45:15 +01:00
a0d38791ed general styling + keycloak.md 2024-12-18 17:41:01 +01:00
cd14b9946a crossplane.md styling 2024-12-18 16:58:58 +01:00
Stephan Lo
1a0383e284 Merge remote-tracking branch 'origin/development' into development 2024-12-18 16:35:32 +01:00
Stephan Lo
432f37aae7 feat(edpdoc): update mkdocs.yaml navigation to include additional user guides 2024-12-18 16:33:20 +01:00
Stephan Lo
511f9f97e2 Merge remote-tracking branch 'refs/remotes/local/development' into development 2024-12-18 16:28:21 +01:00
Stephan Lo
48b60acdb7 feat(edpdoc): new navigation 2024-12-18 16:19:30 +01:00
Stephan Lo
91ee6313cc fix: remove outdated docs-url reference in catalog-info.yaml 2024-12-18 15:45:45 +01:00
Stephan Lo
f86ce821bc fix: update mkdocs.yaml navigation to use correct file references 2024-12-18 15:41:10 +01:00
Stephan Lo
6c9d026c16 refactor: remove old README.md and index.md files, update mkdocs.yaml navigation 2024-12-18 15:39:53 +01:00
Stephan Lo
2f8eac5452 fix: update navigation in mkdocs.yaml to reflect new structure 2024-12-18 15:37:25 +01:00
Stephan Lo
3ebe604150 ren 2024-12-18 15:29:57 +01:00
c94c5cb994 Update docs/userguide/crossplane.md 2024-12-18 14:27:34 +00:00
Stephan Lo
30023b23a0 feat: add README.md for EDP Release 'PoC' and update docs-url in catalog-info.yaml 2024-12-18 15:26:35 +01:00
02454a26a7 Added crossplane.md 2024-12-18 15:25:44 +01:00
Stephan Lo
9acc97880b fix: update README link in catalog-info.yaml and remove unnecessary line in index.md 2024-12-18 15:23:14 +01:00
Stephan Lo
a0d65d1a09 add docs-url annotation to catalog-info.yaml 2024-12-18 15:17:18 +01:00
Stephan Lo
04289d11e1 add link to README in index.md 2024-12-18 15:13:42 +01:00
Stephan Lo
0888db9f29 update site name from EDFDoc to EDPDoc 2024-12-18 15:01:04 +01:00
Stephan Lo
c291f80713 wip nav 2024-12-18 14:58:35 +01:00
a0541bcd77 new version of openbao.md from Michal 2024-12-18 14:44:17 +01:00
2f4290a09c forgejo.md styling 2024-12-18 14:43:10 +01:00
ed1be1e805 backstage.md styling 2024-12-18 13:59:48 +01:00
26db80313d Added forgejo documentation 2024-12-18 13:56:21 +01:00
ba99303f16 updates image in ci-workflow.md 2024-12-18 13:47:10 +01:00
ee1101fb3a adds picture to ci-workflow.md 2024-12-18 13:45:32 +01:00
661edcf761 style fixes for ci-workflow.md and backstage.md 2024-12-18 13:40:38 +01:00
932d607f31 Merge remote-tracking branch 'origin/development' into development 2024-12-18 13:32:21 +01:00
c1ac6a0eb9 Update edp-backstage-integration/catalog-info.yaml 2024-12-18 12:31:54 +00:00
5442480c50 Added forgejo documentation 2024-12-18 13:31:50 +01:00
d6c6aacf6c Update edp-backstage-integration/catalog-info.yaml 2024-12-18 12:30:44 +00:00
6266f6d20f updates main readme 2024-12-18 12:36:33 +01:00
3cc5387ef3 docs/userguide/openbao.md aktualisiert 2024-12-18 11:16:06 +00:00
58d33d406b docs/userguide/argocd.md aktualisiert 2024-12-18 10:56:27 +00:00
14db0d608c docs/userguide/argocd.md aktualisiert 2024-12-18 10:56:11 +00:00
8b9ffc08ed Added grafana 2024-12-18 11:32:17 +01:00
3c00bd5ac3 docs/userguide/openbao.md aktualisiert 2024-12-18 10:02:17 +00:00
6ebca3250b Update docs/userguide/edpbuilder.md 2024-12-18 09:42:27 +00:00
1071d0727f docs/userguide/openbao.md aktualisiert 2024-12-18 09:24:58 +00:00
3f22c2dcf8 Update docs/userguide/argocd.md 2024-12-18 08:48:05 +00:00
b8908db873 Added backstage documentation 2024-12-17 21:27:27 +01:00
a6dd5fe8a8 new format of openbao.md 2024-12-17 11:33:29 +00:00
e8f4cfc363 adds docu files for all team members 2024-12-17 11:51:16 +01:00
3c01c0b199 adds stuff 2024-12-17 11:20:55 +01:00
Stephan Lo
1baeac9b2a fix(backstage-doc): added missing main mkdocs.yaml 2024-12-17 10:03:31 +01:00
Stephan Lo
ef2c7f20c1 feat(backstage-doc): prooved integration into backstage 2024-12-16 23:48:37 +01:00
Stephan Lo
a7cec02db8 feat(backstage-doc): created mkdocs outline, refactored docs structure 2024-12-16 23:04:31 +01:00
Stephan Lo
930159ce62 refactor(edp-poc): moved local development code and poc documentation design in respective folders 2024-12-16 22:21:17 +01:00
Stephan Lo
31f3f9f65d feat(backstage-doc): added techdoc skeleton occording to https://backstage.io/docs/features/techdocs/creating-and-publishing 2024-12-16 22:08:16 +01:00
Stephan Lo
3411feace7 chore(backstage-doc): added devbox and README for techdocs-cli local development 2024-12-16 21:55:00 +01:00
14145a8855 updates ci_workflow.md 2024-12-16 17:35:30 +01:00
c51039f34f adds ci workflow docu 2024-12-16 17:21:49 +01:00
24748fb636 updates README 2024-12-10 17:27:22 +01:00
3029029c4a doc(outline): just briefly added what came into my mind - I like the 'Whatr is it?' section! 2024-12-05 08:33:48 +01:00
eae136e65a
docs(outline): added points / remarks
focusing on understanding the project and the tech behind the poc
2024-12-04 23:46:40 +01:00
6cf0c13cff openbao.md updated 2024-12-04 11:51:30 +00:00
fba7cb3749 outline_miwr_update2 2024-12-04 11:47:02 +00:00
fda1701434 openbao.md added 2024-12-04 11:46:03 +00:00
983c08c090 outline_miwr_update 2024-12-04 11:00:01 +00:00
18d7b976f8 outline_miwr 2024-12-04 10:58:53 +00:00
d2b241afbd adds docs directory 2024-12-03 11:56:36 +01:00
65722bbe6d adds correct readme file and user_documentation.md 2024-12-03 10:55:50 +01:00
403 changed files with 23148 additions and 81 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
node_modules

22
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,22 @@
{
"peacock.color": "#832561",
"workbench.colorCustomizations": {
"activityBar.activeBackground": "#ab307e",
"activityBar.background": "#ab307e",
"activityBar.foreground": "#e7e7e7",
"activityBar.inactiveForeground": "#e7e7e799",
"activityBarBadge.background": "#25320e",
"activityBarBadge.foreground": "#e7e7e7",
"commandCenter.border": "#e7e7e799",
"sash.hoverBorder": "#ab307e",
"statusBar.background": "#832561",
"statusBar.foreground": "#e7e7e7",
"statusBarItem.hoverBackground": "#ab307e",
"statusBarItem.remoteBackground": "#832561",
"statusBarItem.remoteForeground": "#e7e7e7",
"titleBar.activeBackground": "#832561",
"titleBar.activeForeground": "#e7e7e7",
"titleBar.inactiveBackground": "#83256199",
"titleBar.inactiveForeground": "#e7e7e799"
}
}

141
README.md
View file

@ -1,114 +1,95 @@
# 🌟 eDF Release 'PoC'
# 🌟 EDP - EdgeDeveloperPlatform
> **Tagline:** Change the way we work with IDP's.
> * Owner: Telekom MMS & T-Systems
> * Date: December 20, 2024
> * Version: Release 1.0.0 ('PoC')
---
## About this Repository
## 📋 Table of Contents
This repo [`edp-doc`](https://forgejo.edf-bootstrap.cx.fg1.ffm.osc.live/DevFW-CICD/edp-doc) is the documentation repository of the **EDP product**.
- [🌟 eDF Release 'PoC'](#-edf-release-poc)
- [📋 Table of Contents](#-table-of-contents)
- [📖 About the Product](#-about-the-product)
- [🛠️ Application Stack](#-application-stack)
- [✔️ Prerequisites](#-prerequisites)
- [🚀 Installation](#-installation)
- [📷 Screenshots](#-screenshots)
- [🤝 Contributing](#-contributing)
- [📝 License](#-license)
## About the EDP Product
---
EDP is a product developed by the IPCEI-CIS subproject 'edge Developer Framework'. The goal is to provide a cutting edge developer experience for developing and delivering applications in the cloud edge continuum.
## 📖 About the Product
## What EDP contains
**eDF_PoC** is a tool to quickly setup and manage IDPs. The eDF builder can easily setup a Kubenetes cluster (local kind cluster or OSC instance) and deploy tools to manage the Kubernetes resources and the software lifecicle of an application.
One usecase to demonstrate the capabilities of our tool is the Fibonacci Go Application.(<https://forgejo.edf-bootstrap.cx.fg1.ffm.osc.live/Franz.Germann/fibonacci_go>).
The EDP product consists of three parts:
### 🛠️ Application Stack
1. The platform orchestrator, processing declarative 'platform stack' descriptions
1. The predefined stack for a Demo EDP instance
1. The documentation
- **Version-Control:** Forgejo
- **CI:** Forgejo Actions
- **CD:** ArgoCD
- **Monitoring:** Grafana, Prometheus, Loki, Promtail
- **SSO:** Keycloak
- **Developer Portal:** Backstage
- **Secret-Management:** OpenBao, external-secrets
- **Infrastructur-Provisioning:** Crossplane
### Platform Orchestrator `edpbuilder`
---
[edpbuilder](https://forgejo.edf-bootstrap.cx.fg1.ffm.osc.live/DevFW/edpbuilder) is a tool to quickly instantiate and manage Internal Development Platforms (IDPs).
The Edge Development Platform Builder (edpbuilder) can easily setup a Kubenetes cluster (local kind cluster or OSC instance) and deploy tools to manage the Kubernetes resources and the software lifecicle of an application.
## ✔️ Prerequisites
### Predefined `Demo EDP` Stack
- **Tools you'll need to execute the scripts:**
- go
- curl
- jq
- git
- openssl
- docker
- kind
- kubectlmikefarah/yq
- helm
There are predefined stack sets for deploying and orchestrating a whole platform.
---
At the time of writing (version PoC) we provide the [`Demo EDP`as PoC stack](https://forgejo.edf-bootstrap.cx.fg1.ffm.osc.live/DevFW-CICD/stacks).
## 🚀 Installation
#### `Demo EDP` Stack
1. Clone the repository:
The `Demo EDP` Stack contains the follwing application components:
```bash
git clone https://forgejo.edf-bootstrap.cx.fg1.ffm.osc.live/DevFW/edf_poc.git
cd edf_poc
* Version-Control: Forgejo
* CI: Forgejo Actions
* CD: ArgoCD
* Monitoring: Grafana, Prometheus, Loki, Promtail
* SSO: Keycloak
* Developer Portal: Backstage
* Secret-Management: OpenBao, external-secrets
* Infrastructur-Provisioning: Crossplane
2. List all kind clusters:
One usecase to demonstrate the capabilities and development lifecycle flow through all stack components is the [PetClinic Application](./docs/user-documentation/petclinic.md)
```bash
kind get clusters
Output:
primary
shoot
### Documentation
3. Delete all clusters:
The EDP documentation is subject to this repo in folder [`docs`](./docs/). It is created in the [`mkdocs`](https://www.mkdocs.org/) documentation format and natively embedded in the [`Backstage TechDocs` documentation technology](https://backstage.io/docs/features/techdocs/).
```bash
kind delete clusters primary shoot
4. start edfbuilder
Thus it can be read in four ways by
```bash
cd edfbuilder
git pull
./start.sh
5. In a second terminal when the edfbuilder is ready:
1. [accessing the Backstage portal in a running Demo EDP](#doc-in-backstage-in-a-running-demo-edp)
2. [accessing the Backstage portal in a Demo EDP setup on your computer](#doc-in-backstage-in-a-demo-edp-setup-on-your-computer)
3. [browsing the documentaion repository](#doc-in-the-repository)
4. [browsing in a Backstage simulation on your computer](#doc-in-a-backstage-simulation)
```bash
./example.sh
## Getting Started
6. Get all the passwords:
So get started by reading the doc in one of these ways, sorted from 'easy' to 'opinionated' accessibility:
```bash
./getpassword.sh
### Doc in Backstage in a running Demo EDP
---
The documentation can be easily accessed through a Demo EDP instance hosted on our Open Sovereign Cloud (OSC).
Thus there you have a Backstage-Developer Portal running, containing the EDP documentation.
## 📷 Screenshots
Simply log in to Demo EDP Backstage to read through the documentation:
[IMAGES]
* [EDP Documentation URL](https://edf-cc1.cx.fg1.ffm.osc.live/docs/edppoc/component/edp-documentation)
* Username: user1
* Password: PpMpfZYICG9MRRF-3QBY2Zz1-+URYB6+-JRe
---
### Doc in the repository
> Hint: the following link only works when you are in the repo (not in Backstage), like [the central one](https://forgejo.edf-bootstrap.cx.fg1.ffm.osc.live/DevFW-CICD/edp-doc)
## 🤝 Contributing
If you prefer direct access, the content of our documentation is centrally defined and maintained within the [docs folder of this repository](./docs/contents.md).
Contributions are welcome! 🎉
### Doc in a Backstage simulation
Fork the project.
Create a feature branch (git checkout -b feature/YourFeature).
Commit your changes (git commit -m 'Add a new feature').
Push to the branch (git push origin feature/YourFeature).
Open a Pull Request.
> Hint: the following link only works when you are in the repo (not in Backstage), like [the central one](https://forgejo.edf-bootstrap.cx.fg1.ffm.osc.live/DevFW-CICD/edp-doc)
---
The Backstage TechDocs embedding can also be [emulated in a Backstage portal frame running on your computer](./live-preview-integration/README-backstage-local.md).
## 📝 License
### Doc in Backstage in a Demo EDP setup on your computer
[LICENSE]
As `edpbuilder` is a infrastructure agnostic platform orchestrator, you also can boostrap the EDP Demo on your own laptop!
Using the edpbuilder, you can set up a local Demo EDP that comes with a Backstage instance containing the documentation:
> Hint: the following link only works when you are in the repo (not in Backstage), like [the central one](https://forgejo.edf-bootstrap.cx.fg1.ffm.osc.live/DevFW-CICD/edp-doc)
[How to set up a local IDP on a kind cluster](./docs/user-documentation/edpbuilder.md)

View file

@ -43,4 +43,4 @@ Thus all parts coming from upstream repos should have a physical copy in this re
Alternative: Submodules
Proposal: The final product will be a export of the repo
Proposal: The final product will be a export of the repo

View file

Before

Width:  |  Height:  |  Size: 295 KiB

After

Width:  |  Height:  |  Size: 295 KiB

View file

Before

Width:  |  Height:  |  Size: 264 KiB

After

Width:  |  Height:  |  Size: 264 KiB

17
devbox.json Normal file
View file

@ -0,0 +1,17 @@
{
"$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.14.0/.schema/devbox.schema.json",
"packages": [
"nodejs@latest",
"terraform@latest"
],
"shell": {
"init_hook": [
"echo 'Welcome to devbox!' > /dev/null"
],
"scripts": {
"test": [
"echo \"Error: no test specified\" && exit 1"
]
}
}
}

121
devbox.lock Normal file
View file

@ -0,0 +1,121 @@
{
"lockfile_version": "1",
"packages": {
"github:NixOS/nixpkgs/nixpkgs-unstable": {
"resolved": "github:NixOS/nixpkgs/2d9e4457f8e83120c9fdf6f1707ed0bc603e5ac9?lastModified=1741462378&narHash=sha256-ZF3YOjq%2BvTcH51S%2BqWa1oGA9FgmdJ67nTNPG2OIlXDc%3D"
},
"nodejs@latest": {
"last_modified": "2025-03-16T16:17:41Z",
"plugin_version": "0.0.2",
"resolved": "github:NixOS/nixpkgs/8f76cf16b17c51ae0cc8e55488069593f6dab645#nodejs_23",
"source": "devbox-search",
"version": "23.10.0",
"systems": {
"aarch64-darwin": {
"outputs": [
{
"name": "out",
"path": "/nix/store/dihlffh62qmgzsrxq1igwxicdyr3fn8a-nodejs-23.10.0",
"default": true
},
{
"name": "libv8",
"path": "/nix/store/ks94i4365833bykrzg3d3mqxnciygyrn-nodejs-23.10.0-libv8"
}
],
"store_path": "/nix/store/dihlffh62qmgzsrxq1igwxicdyr3fn8a-nodejs-23.10.0"
},
"aarch64-linux": {
"outputs": [
{
"name": "out",
"path": "/nix/store/m7j1lf8a4z5bfla1m78pa3y12888hl7b-nodejs-23.10.0",
"default": true
},
{
"name": "libv8",
"path": "/nix/store/kfvlfxx83n2w2fyb8hiz4p4dc165r035-nodejs-23.10.0-libv8"
}
],
"store_path": "/nix/store/m7j1lf8a4z5bfla1m78pa3y12888hl7b-nodejs-23.10.0"
},
"x86_64-darwin": {
"outputs": [
{
"name": "out",
"path": "/nix/store/nj0d1lc4nanqj7v4ibcgd26m3p5yfb0h-nodejs-23.10.0",
"default": true
},
{
"name": "libv8",
"path": "/nix/store/k5rvmvqyibamfxa7cfzjfd5ldmi38kf3-nodejs-23.10.0-libv8"
}
],
"store_path": "/nix/store/nj0d1lc4nanqj7v4ibcgd26m3p5yfb0h-nodejs-23.10.0"
},
"x86_64-linux": {
"outputs": [
{
"name": "out",
"path": "/nix/store/m7imcmwi4hschl257dzc33gxciqlf4bm-nodejs-23.10.0",
"default": true
},
{
"name": "libv8",
"path": "/nix/store/wy7ysxmd2ygdc5zpbhf9ripwgvvvnwsd-nodejs-23.10.0-libv8"
}
],
"store_path": "/nix/store/m7imcmwi4hschl257dzc33gxciqlf4bm-nodejs-23.10.0"
}
}
},
"terraform@latest": {
"last_modified": "2025-04-10T20:20:34Z",
"resolved": "github:NixOS/nixpkgs/d19cf9dfc633816a437204555afeb9e722386b76#terraform",
"source": "devbox-search",
"version": "1.11.4",
"systems": {
"aarch64-darwin": {
"outputs": [
{
"name": "out",
"path": "/nix/store/46l1vs4h00h1y3n3xxwzab0a16mawfcs-terraform-1.11.4",
"default": true
}
],
"store_path": "/nix/store/46l1vs4h00h1y3n3xxwzab0a16mawfcs-terraform-1.11.4"
},
"aarch64-linux": {
"outputs": [
{
"name": "out",
"path": "/nix/store/knyqig364fi94f3z33q47jawv9b4h4sy-terraform-1.11.4",
"default": true
}
],
"store_path": "/nix/store/knyqig364fi94f3z33q47jawv9b4h4sy-terraform-1.11.4"
},
"x86_64-darwin": {
"outputs": [
{
"name": "out",
"path": "/nix/store/9w7xlspipmx4kal4bagqnf76h0wv8lx8-terraform-1.11.4",
"default": true
}
],
"store_path": "/nix/store/9w7xlspipmx4kal4bagqnf76h0wv8lx8-terraform-1.11.4"
},
"x86_64-linux": {
"outputs": [
{
"name": "out",
"path": "/nix/store/xlg2aqgy2fwilpfnla4313f39vs0hhmb-terraform-1.11.4",
"default": true
}
],
"store_path": "/nix/store/xlg2aqgy2fwilpfnla4313f39vs0hhmb-terraform-1.11.4"
}
}
}
}
}

0
docs/about/license.md Normal file
View file

133
docs/about/mkdocs-test.md Normal file
View file

@ -0,0 +1,133 @@
# Mkdoc Test Doc
```plantuml
@startuml
title Login Sequence
ComponentA->ComponentB: Login Request
note right of ComponentB: ComponentB logs message
ComponentB->ComponentA: Login Response
@enduml
```
## hello mock docs
!!! test
Testing something
Abbreviations:
Some text about MOCDOC
This is a paragraph.
{: #test_id .test_class }
Apple
: Pomaceous fruit of plants of the genus Malus in
the family Rosaceae.
```javascript
import { test } from 'something';
const addThingToThing = (a, b) a + b;
```
- [abc](#abc)
- [xyz](#xyz)
## abc
This is a b c.
## xyz
This is x y z.
# The attack plan
{% dot attack_plan.svg
digraph G {
rankdir=LR
Earth [peripheries=2]
Mars
Earth -> Mars
}
%}
```graphviz dot attack_plan.svg
digraph G {
rankdir=LR
Earth [peripheries=2]
Mars
Earth -> Mars
}
```
# PlantUML Samples
```plantuml classes="uml myDiagram" alt="Diagram placeholder" title="My diagram"
@startuml
Goofy -> MickeyMouse: calls
Goofy <-- MickeyMouse: responds
@enduml
```
# Emojis
:bulb: :smile:
# Code blocks
```javascript
import { test } from 'something';
const addThingToThing = (a, b) a + b;
```
# Grouped Code blocks
=== "JavaScript"
```javascript
import { test } from 'something';
const addThingToThing = (a, b) a + b;
```
=== "Java"
```java
public void function() {
test();
}
```
```java tab="java"
public void function() {
test();
}
```
```java tab="java 2"
public void function() {
test();
}
```
# MDX truly sane lists
- attributes
- customer
- first_name
- test
- family_name
- email
- person
- first_name
- family_name
- birth_date
- subscription_id
- request
<!-- prettier-ignore -->
*[MOCDOC]: Mock Documentation

View file

35
docs/contents.md Normal file
View file

@ -0,0 +1,35 @@
# EDP Documentation
The documentation consists of two parts
* User Documentation
* Technical Documentation
Both are outlined in the following.
## User Documentation
A 'user' is someone who accesses a predeployed EDP and wants to drive developer use cases.
### 🧐 What is it?
When you enter a EDP as a development user the EDP is an Internal Development Platform.
### 📦 Main features
* Start new use cases
* Search, browse, monitor and revoke already run use cases
### ⏱️ Quick start guide (WiP)
* Open the platform URL
* Follow one of the use cases
## Technical Documentation
EDP is a product developed by the IPCEI-CIS subproject 'edge Developer Framework'. The goal is to provide a cutting edge developer experience for developing and delivering applications in the cloud edge continuum.
It consists of
* [edpbuilder](https://forgejo.edf-bootstrap.cx.fg1.ffm.osc.live/DevFW/edpbuilder) as a tool to quickly instantiate and manage Internal Development Platforms (IDPs).
* declarative 'platform stack' descriptions which are processed by the orchestrator

1
docs/index.md Symbolic link
View file

@ -0,0 +1 @@
../README.md

BIN
docs/ressources/1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 503 KiB

BIN
docs/ressources/2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 KiB

BIN
docs/ressources/3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

BIN
docs/ressources/4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 KiB

BIN
docs/ressources/5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 KiB

BIN
docs/ressources/6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 535 KiB

BIN
docs/ressources/7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 591 KiB

View file

@ -0,0 +1,6 @@
title: Technical doc
arrange:
- concepts
- architecture
- product
- project

View file

@ -0,0 +1,126 @@
# CI/CD pipeline tools for composable pipeline
## Context and Problem Statement
In order to build a composable pipeline that provides a golden path and reusable components, we need to define the tools that will be used to execute the pipeline.
ArgoCD is considered set in stone as the tool to manage the deployment of applications. However, the tools to compose and execute the pipeline are still up for debate.
> Note: The pipeline will use many other tools to perform certain actions such as testing, building, and deploying. This ADR is focused on the tools that will be used to compose and execute the pipeline itself.
In general, there are 2 decisions to make:
- What tools should we use to execute the pipeline?
- What tools should we use to compose the pipeline?
The following use-cases should be considered for this decision:
- **User who wants to manage their own runners (???)**
- User who only wants to use our golden path
- User who wants to use our golden path and add custom actions
- User who wants to use their own templates and import some of our actions
- User who wants to import an existing GitHub repository with a pipeline
## Considered Options
- Argo Workflows + Events
- Argo Workflows + Events + Additional Composition tool
- Forgejo Actions
- Forgejo Actions + Additional Composition tool
- Dagger (as Engine)
- Shuttle (as Engine)
## Decision Outcome
TBD
## Pros and Cons of the Options
### Argo Workflows + Events
**Pro**
- integration with ArgoCD
- ability to trigger additional workflows based on events.
- level of maturity and community support.
**Con**
- Ability to self-host runners?
- way how composition for pipelines works (based on Kubernetes CRDs)
- Templates must be available in the cluster where the pipelines are executed, so any imported templates must be applied into the cluster before the pipeline can be executed and cannot simply reference a repository
- This makes it difficult to import existing templates from other repositories when using self-hosted runners
- This also makes it difficult to use our golden path, or at least we will need to provide a way to import our golden path into the cluster
- This also makes the split of every component has its own repo very difficult
- additional UI to manage the pipeline
- Additional complexity
### Argo Workflows + Events + Additional Composition tool
**Pro**
- Composability can be offloaded to another tool
**Con**
- All cons of the previous option (except composability)
- Additional complexity by adding another tool
### Forgejo Actions
**Pro**
- tight integration with GitHub Actions providing a familiar interface for developers and a vast catalog of actions to choose from
- ability to compose pipelines without relying on another tool
- Self-hosting of runners possible
- every component can have its own repository and use different tools (e.g. written in go, bash, python etc.)
**Con**
- level of maturity - will require additional investments to provide a production-grade system
### Forgejo Actions + Additional Tool
**Pro**
- may be possible to use GitHub actions alongside another tool
**Con**
- additional complexity by adding another tool
### Shuttle
**Pro**
- Possibility to clearly define interfaces for pipeline steps
- Relatively simple
**Con**
- basically backed by only one company
- **centralized templates**, so no mechanism for composing pipelines from multiple repositories
### Dagger
**Pro**
- Pipeline as code
- if it runs it should run anywhere and produce the "same" / somewhat stable results
- build environments are defined within containers / the dagger config. Dagger is the only dependency one has to install on a machine
- DX is extremely nice, especially if you have to debug (image) builds, also type safety due to the ability to code your build in a strong language
- additional tooling, like trivy, is added to a build pipeline with low effort due to containers and existing plugin/wrappers
- you can create complex test environments similar to test containers and docker compose
**Con**
- relies heavily containers, which might not be available some environments (due to policy etc), it also has an effect on reproducibility and verifiability
- as a dev you need to properly understand containers
- dagger engine has to run privileged locally and/or in the cloud which might be a blocker or at least a big pain in the ...
**Suggestion Patrick**
- dagger is a heavy weight and might not be as productive in a dev workflow as it seems (setup lsp etc)
- it might be too opinionated to force on teams, especially since it is not near mainstream enough, community might be too small
- it feels like dagger gets you 95% of the way, but the remaining 5% are a real struggle
- if we like it, we should check the popularity in the dev community before further considering as it has a direct impact on teams and their preferences

View file

@ -0,0 +1,62 @@
---
status: "proposed"
decision-makers: {list everyone involved in the decision}
---
<!-- markdownlint-disable-next-line MD025 -->
# Replace Keycloak with OpenBao as OIDC Provider
## Context and Problem Statement
The EDP currently relies on Keycloak as the OpenID Connect (OIDC) provider to handle authentication and authorization. However, Keycloak is fairly complex and has quite some maintenance overhead, which will leads to increased operational effort. We need to determine if replacing Keycloak with OpenBao, a tool we already use for secrets management and which may support OIDC capabilities, can streamline our architecture and reduce these operational burdens.
## Decision Drivers
- Simplify architecture by reducing the number of tools in our ecosystem.
- Reduce operational complexity and maintenance overhead to improve team efficiency.
- Ensure seamless integration with existing systems, particularly leveraging our current use of OpenBao.
- Maintain or enhance security and performance to meet platform requirements.
## Considered Options
- Keep using Keycloak
- Replace Keycloak with OpenBao
## Decision Outcome
Chosen option: "Replace Keycloak with OpenBao", because it enables us to consolidate identity and secrets management into a single tool, reducing operational complexity, improving integration with our existing infrastructure, and potentially enhancing performance, provided OpenBao can meet our OIDC needs.
### Consequences
- *Good*, because it simplifies the architecture by reducing the number of tools we need to manage.
- *Good*, because it may lower operational costs by eliminating a separate system and leveraging an existing open-source tool.
- *Bad*, because additional configuration or development might be required to ensure OpenBao fully supports all necessary OIDC features.
- *Bad*, because relying on a single tool for both identity and secrets management increases risk if OpenBao encounters issues.
### Confirmation
- Conduct a proof-of-concept to validate that OpenBao can effectively serve as an OIDC provider meeting our platforms requirements.
- Validate that all EDP components support the Authorization Code Flow
- Review the design and implementation with the development team to confirm alignment with this decision.
## Pros and Cons of the Options
### Keep using Keycloak
Keycloak is a mature, feature-rich OIDC provider widely used for authentication and authorization.
- *Good*, because it offers extensive OIDC features, including support for single sign-on and various authentication protocols.
- *Good*, because it is already integrated into our platform, minimizing immediate changes.
- *Bad*, because its complexity increases configuration and maintenance efforts.
- *Bad*, because maintaining it as a separate tool adds to operational overhead.
### Replace Keycloak with OpenBao
OpenBao, a fork of HashiCorp Vault, is currently used for secrets management and may be configurable as an OIDC provider.
- *Good*, because consolidating identity and secrets management into one tool simplifies our architecture.
- *Good*, because it leverages our existing OpenBao deployment, potentially improving integration and reducing costs.
- *Bad*, because OpenBao may not natively support all advanced OIDC features provided by Keycloak, such as comprehensive user management.
- *Bad*, because its community and documentation for OIDC use cases may be less robust compared to Keycloak.
## More Information
Before finalizing this decision, we must verify OpenBaos OIDC capabilities against our specific authentication and authorization requirements, such as user federation and token issuance for our development platform. The team should also assess the long-term implications of relying heavily on OpenBao and consider revisiting this decision if significant gaps in OIDC functionality are identified during the proof-of-concept phase.

View file

@ -0,0 +1,5 @@
# ADRs
Architecture Decision Records (ADRs) are a way to capture the important architectural decisions made during the development of a project. They are a way to document the context, the decision, and the consequences of the decision. They are a way to keep track of the architectural decisions made in a project and to communicate them to the team.
The [Markdown Architectural Decision Records](https://adr.github.io/madr/) (MADR) format is a simple and easy-to-use format for writing ADRs in Markdown.

View file

@ -0,0 +1,67 @@
<!-- we need to disable MD025, because we use the different heading "ADR Template" in the homepage (see above) than it is foreseen in the template -->
<!-- markdownlint-disable-next-line MD025 -->
# {short title, representative of solved problem and found solution}
## Context and Problem Statement
{Describe the context and problem statement, e.g., in free form using two to three sentences or in the form of an illustrative story. You may want to articulate the problem in form of a question and add links to collaboration boards or issue management systems.}
<!-- This is an optional element. Feel free to remove. -->
## Decision Drivers
* {decision driver 1, e.g., a force, facing concern, …}
* {decision driver 2, e.g., a force, facing concern, …}
* … <!-- numbers of drivers can vary -->
## Considered Options
* {title of option 1}
* {title of option 2}
* {title of option 3}
* … <!-- numbers of options can vary -->
## Decision Outcome
Chosen option: "{title of option 1}", because {justification. e.g., only option, which meets k.o. criterion decision driver | which resolves force {force} | … | comes out best (see below)}.
<!-- This is an optional element. Feel free to remove. -->
### Consequences
* Good, because {positive consequence, e.g., improvement of one or more desired qualities, …}
* Bad, because {negative consequence, e.g., compromising one or more desired qualities, …}
* … <!-- numbers of consequences can vary -->
<!-- This is an optional element. Feel free to remove. -->
### Confirmation
{Describe how the implementation of/compliance with the ADR can/will be confirmed. Are the design that was decided for and its implementation in line with the decision made? E.g., a design/code review or a test with a library such as ArchUnit can help validate this. Not that although we classify this element as optional, it is included in many ADRs.}
<!-- This is an optional element. Feel free to remove. -->
## Pros and Cons of the Options
### {title of option 1}
<!-- This is an optional element. Feel free to remove. -->
{example | description | pointer to more information | …}
* Good, because {argument a}
* Good, because {argument b}
<!-- use "neutral" if the given argument weights neither for good nor bad -->
* Neutral, because {argument c}
* Bad, because {argument d}
* … <!-- numbers of pros and cons can vary -->
### {title of other option}
{example | description | pointer to more information | …}
* Good, because {argument a}
* Good, because {argument b}
* Neutral, because {argument c}
* Bad, because {argument d}
* …
<!-- This is an optional element. Feel free to remove. -->
## More Information
{You might want to provide additional evidence/confidence for the decision outcome here and/or document the team agreement on the decision and/or define when/how this decision the decision should be realized and if/when it should be re-visited. Links to other decisions and resources might appear here as well.}

View file

@ -0,0 +1,9 @@
---
title: Design
weight: 1
description: Edge Developver Framework Design Documents
---
This design documentation structure is inspired by the [design of crossplane](https://github.com/crossplane/crossplane/tree/main/design#readme).

View file

@ -0,0 +1,31 @@
---
title: eDF is self-contained and has an own IAM (WiP)
weight: 2
description: tbd
---
* Type: Proposal
* Owner: Stephan Lo (stephan.lo@telekom.de)
* Reviewers: EDF Architects
* Status: Speculative, revision 0.1
## Background
tbd
## Proposal
==== 1 =====
There is a core eDF which is self-contained and does not have any impelmented dependency to external platforms.
eDF depends on abstractions.
Each embdding into customer infrastructure works with adapters which implement the abstraction.
==== 2 =====
eDF has an own IAM. This may either hold the principals and permissions itself when there is no other IAM or proxy and map them when integrated into external enterprise IAMs.
## Reference
Arch call from 4.12.24, Florian, Stefan, Stephan-Pierre

View file

@ -0,0 +1,23 @@
---
title: Agnostic EDF Deployment
weight: 2
description: The implementation of EDF must be kubernetes provider agnostic
---
* Type: Proposal
* Owner: Stephan Lo (stephan.lo@telekom.de)
* Reviewers: EDF Architects
* Status: Speculative, revision 0.1
## Background
EDF is running as a controlplane - or let's say an orchestration plane, correct wording is still to be defined - in a kubernetes cluster.
Right now we have at least ArgoCD as controller of manifests which we provide as CNOE stacks of packages and standalone packages.
## Proposal
The implementation of EDF must be kubernetes provider agnostic. Thus each provider specific deployment dependency must be factored out into provider specific definitions or deployment procedures.
## Local deployment
This implies that EDF must always be deployable into a local cluster, whereby by 'local' we mean a cluster which is under the full control of the platform engineer, e.g. a kind cluster on their laptop.

View file

@ -0,0 +1,28 @@
---
title: Agnostic Stack Definition
weight: 2
description: The implementation of EDF stacks must be kubernetes provider agnostic by a templating/hydration mechanism
---
* Type: Proposal
* Owner: Stephan Lo (stephan.lo@telekom.de)
* Reviewers: EDF Architects
* Status: Speculative, revision 0.1
## Background
When booting and reconciling the 'final' stack exectuting orchestrator (here: ArgoCD) needs to get rendered (or hydrated) presentations of the manifests.
It is not possible or unwanted that the orchestrator itself resolves dependencies or configuration values.
## Proposal
The hydration takes place for all target clouds/kubernetes providers. There is no 'default' or 'special' setup, like the Kind version.
## Local development
This implies that in a development process there needs to be a build step hydrating the ArgoCD manifests for the targeted cloud.
## Reference
Discussion from Robert and Stephan-Pierre in the context of stack development - there should be an easy way to have locally changed stacks propagated into the local running platform.

View file

@ -0,0 +1,51 @@
# proposal: how to (re)structure our infrastructure setup
what we have:
* different providers - currently OTC and kind
* different groups of environments - currently called 'environment_namespace'
* different environments in each group of environments
* environments are called 'cluster_environment' and are terragrunt stacks, i.e. a huge set of resources where the kubernetes cluster itself is only one of them
* the top domain name (like t09.de, buildth.ing) is bound to the environment group
issues:
* in provider OTC there are two attributes for the environment group - 'tenant' and 'environment_namespace' are the same
* missing hierarchy for other providers than otc - we directly start with 'prod' and 'non-prod' right now
## opportunity
right now we start switching to go code.
we can use this port to also restructure, generalize and improve the infrastructure and platfrom-provisioning.
## proposed environment hierarchy
* new: the 'environment_namespace' layer is called 'platformzone': "A neutral, abstract term that encompasses both the isolation (account, tenant, subscription) and the operational context (prod vs. non-prod)." (ChatGPT)
* new: folder 'environments'
* new: level 1 hierarchy 'provider'
* old: level 2 hierarchy 'platformzone'
* old: level 3 hierarchy 'environment'
### visualization
```bash
environments
├── provider:kind
│ └── platformzone:non-prod e.g.vm-1 or local
│ ├── edp
│ └── observability
├── provider:otc
│ ├── platformzone:non-prod i.e. tenant-1
│ │ ├── central-forgejo-aka-edp
│ │ ├── forgejo-dev
│ │ └── observability
│ └── platformzone:prod i.e. tenant-2
│ ├── edp
│ └── observability
└── provider:scaleway
├── platformzone:non-prod e.g. account-1
└── platformzone:prod e.g. account-2
├── edp
└── observability
```
![alt text](environments.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

View file

@ -0,0 +1,42 @@
@startuml
!includeurl https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml
LAYOUT_WITH_LEGEND()
Person(dev, "Developer")
System_Boundary(env, "environments") {
System_Boundary(kind, "provider:kind") {
System_Boundary(kind_np, "platformzone:non-prod (vm-1 / local)") {
System(edp_kind, "edp")
System(obs_kind, "observability")
}
}
System_Boundary(otc, "provider:otc") {
System_Boundary(otc_np, "platformzone:non-prod (tenant-1)") {
System(edp_otc_np, "central-forgejo-aka-edp")
System(forgejo_dev, "forgejo-dev")
System(obs_otc_np, "observability")
}
System_Boundary(otc_prod, "platformzone:prod (tenant-2)") {
System(edp_otc_p, "edp")
System(obs_otc_p, "observability")
}
}
System_Boundary(scaleway, "provider:scaleway") {
System_Boundary(scaleway_np, "platformzone:non-prod (account-1)") {
' leer
}
System_Boundary(scaleway_p, "platformzone:prod (account-2)") {
System(edp_scaleway_p, "edp")
System(obs_scaleway_p, "observability")
}
}
}
@enduml

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,22 @@
# EDP Design
## Mission, High level arch
* Date: May 2025
![alt text](high-level-arch.png)
* [Link to the powerpoint in internal MMS Sharepoint](https://telekom.sharepoint.de/:p:/r/sites/IPCEICIS/Freigegebene%20Dokumente/8%20Sub-Projects/Developer%20Framework/02%20Solution%20Development%20Track/EDP%20-%20High-Level%20Architecture%20-%20Draft%20v0.1.pptx?d=wa333a7fef6684bb6b606c977a82d8736&csf=1&web=1&e=bkvKwM)
We create a developer platform, comparable to replit or humanitec. In the first milestone of the product, the functionality is essentially github clone and we use Forgejo as implementation (version control, project management, CI/CD). Forgejo is also extended as a portal, e.g. to implement functionalities such as those that exist in Backstage. The orchestration of the platform is done via Forgejo pipelines and argocd and kubernetes operators. The deployment is in a European cloud (currently OTC), completely as infrastructure as code.
## Guidelines / Competitor claims
* Railway: Every application stack is different, but the building blocks are similar. These are the core primitives behind every app hosted on Railway.
* Qovery is a DevOps Automation Tool that eliminates your DevOps hiring needs. Provision and maintain a secure and compliant infrastructure in hours - not months!
* Railway is a deployment platform that lets you provision infrastructure, develop locally with that infrastructure, and deploy to the cloud or simply run ready-made software from our template marketplace.
[![alt text](humanitec-orchestrator.png)](https://humanitec.com/products/platform-orchestrator)

Binary file not shown.

After

Width:  |  Height:  |  Size: 626 KiB

View file

@ -0,0 +1,27 @@
---
title: Architecture
weight: 1
description: High level EDP Architecture
---
## Architecture
> This architecture chart was discussed in the Berlin arch workshop Jan. 21st 2025
![alt text](architecture-IMG_20250121_163020.jpg)
## Additional notes
With respect to the meaning of 'Platform as a product' there are following notes to EDP as a product:
* Product items are
1. EDP Foundry
a) oppionated extreme, (aka 'locked down version')
b) 'construction set' ('baukasten') extreme
c) provide documentation
2. all EDP's themsselves
* 'product' in terms of a ciustomer view means two aspects:
* they get it provisionned, i.e. we do the bootstrapping
* they have it in maintenines state, i.w. we do the maintaining (compare to github: there is no github version to the customer!)

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 237 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 327 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 92 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 59 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 78 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 353 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 464 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 430 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 458 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 484 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

View file

@ -0,0 +1,86 @@
# MVP1-12-OTC Milestone
History:
* 24.04.25: Initial Arch done in lucid by Waldemar
* 06.05.25: Ported to C4 by Stephan
* 13.05.25: Review OTC-EDP
## Design links to lucid app
* [Architecture](https://lucid.app/lucidspark/7134abcb-0c5e-41e5-93da-7118e285a668/edit?invitationId=inv_fbf0d105-7023-4740-806e-fcbb522ea61a&page=0_0#)
* [Roadmap](https://lucid.app/lucidspark/16a4c21e-5798-4562-9a59-14b54e722124/edit?invitationId=inv_17de9c72-a92f-4544-a6c3-08e52dd336a2&page=0_0#)
## Roadmap Forgejo-as-a-Service
![Roadmap](./_assets/roadmap.png)
![alt text](./_assets/8-weeks-goal.png)
## C4 Architecture
* https://forgejo.edf-bootstrap.cx.fg1.ffm.osc.live/DevFW-CICD/edp-doc/src/branch/development/likec4/views/deployment/otc/otc.c4
![alt text](./_assets/image.png)
![alt text](./_assets/image-1.png)
## Overall
### Deployment
![alt text](./_assets/deployment-c4.png)
### Architecture
![alt text](./_assets/EDPForgejoArch1.svg)
### Work packages
![alt text](./_assets/EDPForgejoArch2.svg)
## EDP Foundry
### Sub-Components 'Internal Services' and 'Central Observaability'
![alt text](./_assets/EDPForgejoArch3.svg)
## EDP (deployed per tenant)
### Sub-Components 'Kubernetes' and 'Cloud Services'
![alt text](./_assets/EDPForgejoArch4.svg)
## Operator (Provisioning Pipeline)
### Sub-Components 'Forgejo-Actions' and 'ArgoCD'
![alt text](./_assets/EDPForgejoArch5.svg)
![alt text](./_assets/EDPForgejoArch6.svg)
## OTC EDP product review on 13.05.25
![alt text](./_assets/edp-otc-1.png)
![alt text](./_assets/edp-otc-2.png)
![alt text](./_assets/edp-otc-3.png)
![alt text](./_assets/edp-otc-4.png)
![alt text](./_assets/edp-otc-5.png)
## Mob working mode
![alt text](./_assets/mob-working.png)
## IAM (OTC)
![alt text](./_assets/iam-otc.png)
## Environment / Deployment plan
![envs](./_assets/deployment.svg)
![alt text](./_assets/deloyment-faas.png)

View file

@ -0,0 +1,60 @@
### WiP - needs to be reworked
Participants: Michael, Robert, Stephan
Date: Thu, 05.06.2025
# EDP Product Line 'Portal/Frontend/Forgejo'
[Also refer to other page here](../../../product/components/forgejo/index.md)
## how to proceed
* let's create tickets!
* let's mob!
## terms
Frontend: The part in the platfrom the user accesses. These are CLIs, APIs and Portals. Forgejo is our Portal.
### Agreement
* Forgejo=Portal (of the platform)
* Forgejo has a 'Frontend' - this is the touchpoint for users (like HTML-browsers)
* Forgejo has a backend, which delivers the content to be presented in the frontend
## issues
* Michael into ArchMeeting?! (agreement!)
* Robert/Stepan: discusion about our mindset - mobbing as avoiding missing detailed planning, in two streams
* Michael - Michal, Felix sind das 'Portal-Frontend'
* Tickets in Jira currently
* TODO creating tickets in forgejo / porting tickets from Jira
* we create the new forgejo-proect 'Portal-Frontend'
* zweiter meilenstein: Backend-activities need to be adressed in the future
* TODO have a look into the old backstage-portal
* TODO Stephna an Julius ... Logo/CICD: We should define Logo/name tenant name, product name, url schemas
### Development lifecycle
* create project in CFor
* create tasks in CFor
* TODO Stephan possible tasks
* Environments -> let's provide a 'productline-forgejo' env in OTC!
* Pipelines
* check all tests!
### Architecture
* Goals:
* Stay Open Source compatible!
* stay forgejo-downstreaming compatible!
* provide ADRs before breaking changes
#### forgejo-Architecture
* analyse, presnt ad discuss forgejo architecture
* Notice [Forgejo-Design guidleine](https://codeberg.org/forgejo/design/)
* Notice/You must read [Developer Doc](https://forgejo.org/docs/next/contributor/)

View file

@ -0,0 +1,3 @@
# Prototype Forgejo ProjectManagement
https://lucid.app/lucidspark/d2eb9577-78dd-42c9-b84b-b00958f381d5/edit?invitationId=inv_de56db0a-3439-44b3-8c48-b8e274f52256&page=0_0#

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

View file

@ -0,0 +1,794 @@
# OSS licenceses and their impact on Forgejo development
Forgejo ist GPL copylefted [since v9 from October 2024](https://forgejo.org/2024-10-release-v9-0/). The entry to the [discussion is here (blog)](https://forgejo.org/2024-08-monthly-update/#forgejo-is-now-copyleft). and [here (ticket)](https://codeberg.org/forgejo/discussions/issues/192)
In the follwowing is the documentation of a chat with GPT about OSS licencing in general and the impact of Forgejo's copyleft on our Forgejo development.
## TL:DR;
* It looks like that as a SaaS/PaaS product EDP will not be affected to be 'infected' by GPL
* But if we share/distribute the code, all 'integrated' parts (like frontend code) needs to be published under GPL also.
* [MMS-OSS](https://confluence.telekom-mms.com/spaces/MMSMTB/pages/717458132/Open+Source+License+Compliance)
* [Security-Checklist](https://github.com/ossf/scorecard/blob/main/docs/checks.md)
### Forgejo release line
The following chart shows the Forgejo releases (and semantiv versioning) over time and their relation - soft- vs hardfork - to Gitea.
![alt text](forgejo-releases.jpg)
## MMS Support
```
Von: Schurz, Martin <Martin.Schurz@telekom.de>
Gesendet: Dienstag, 10. Juni 2025 16:47
An: Lo, Stephan <Stephan.Lo@telekom.de>
Betreff: AW: Going OS, z.B. in Codeberg - Anschubfragen :-)
Hi Stephan,
an sich gibts da überraschend wenig zu beachten.
Einer der relevanten Punkte ist die Wahl der Lizenz, da gibt es hier Hilfestellungen: https://confluence.telekom-mms.com/spaces/MMSMTB/pages/717458132/Open+Source+License+Compliance
Dann lohnt meist noch ein Blick in Richtung Security, dafür hat es hier ne schöne Sammlung: https://github.com/ossf/scorecard/blob/main/docs/checks.md
Alles andere ist effektiv nur ongoing Maintanance.
Du kannst mir gerne mal nen Termin Ende Juni, nachdem MMS Geburtstag, einstellen, dann können wir ein wenig drüber reden.
Grüße
Martin
--
Deutsche Telekom MMS GmbH
Agile Operations & Cloud
Martin Schurz
IT Architect
Riesaer Strasse 5, 01129 Dresden
+49 351 2820-2773
Martin.Schurz@telekom.de
You can find the compulsory statement on: www.telekom-mms.com/pflichtangaben
Von: Lo, Stephan <Stephan.Lo@telekom.de>
Gesendet: Donnerstag, 5. Juni 2025 08:00
An: Schurz, Martin <Martin.Schurz@telekom.de>
Betreff: Going OS, z.B. in Codeberg - Anschubfragen :-)
Hallo Martin,
du hast ja so schön mit mir die Telekom-MMS Organistaion auf Codeberg errichtet (https://codeberg.org/telekom-mms) jetzt überlegen wir uns (also das IPCEICIS-Platform-Projekt), ob und wie wir da unseren Code eröffenltichne wollen/können.
Ich selbst bin da ohne Erfahrung, und Stefan ist ja nicht mehr da.
Jetzt denke ich mir, ob es vielleicht Bets Prectices aus der MMS gibt, die ich mal gegenlesen/konsumieren und bewerten könnte?
Hättest du hierfür einen Einstiegspunkt für mich?
Oder auch die Möglichkeit einer kleinen Session?
Und/oder gibt es weitere Player/Experten, die ich ansprechen kann?
Danke dir für ein paar ratschläge!
Stephan
```
## Copyleft
> was ist copyleft software?
**Copyleft** ist ein Begriff aus dem Bereich der **freien Softwarelizenzen**. Er bezeichnet eine spezielle Lizenzform, bei der **die Freiheit, Software zu nutzen, zu verändern und weiterzugeben, sichergestellt und auf alle abgeleiteten Werke übertragen wird**.
### Einfach erklärt:
Wenn Software unter einer **Copyleft-Lizenz** steht:
* Darfst du sie **frei verwenden**, **verändern** und **weiterverbreiten**.
* **Aber:** Wenn du sie veränderst oder in eigene Programme einbaust und diese weiterverbreitest, **musst du deinen Code auch wieder unter derselben Lizenz veröffentlichen**.
### Ziel von Copyleft:
Copyleft verhindert, dass jemand freie Software nimmt, verbessert und **dann proprietär macht** (also als unfreie Software weiterverkauft). Es sorgt dafür, dass **Freiheit erhalten bleibt** auch bei Änderungen und Weiterentwicklungen.
---
### Beispiele für Copyleft-Lizenzen:
* **GNU General Public License (GPL)** stärkstes Copyleft
* **AGPL (Affero GPL)** wie GPL, aber auch bei Webdiensten wirksam
* **LGPL (Lesser GPL)** abgeschwächt, erlaubt Linken mit proprietärem Code
---
### Abgrenzung:
* **Copyleft**: Freiheit bleibt ansteckend (GPL).
* **Permissive Lizenzen** (wie MIT oder Apache): Du darfst den Code auch in proprietäre Software einbauen, ohne ihn wieder offenlegen zu müssen.
---
### Kurzes Beispiel:
Du nutzt eine GPL-lizenzierte Bibliothek in deinem Projekt.
→ Du verteilst dein Programm weiter.
→ Du **musst deinen Code offenlegen** und unter GPL stellen.
→ Du **darfst nicht** dein Programm schließen und sagen: „Ist jetzt meins.“
---
## Integration of proprietary own code
> ich arbeite in einer company. wir verwenden forgejo als ausgangsprodukt für unser eigenes produkt P. wir wollen forgejo zu einem portal ausbauen. forgejo hat seit v9 eine copyleft lizenz, es ist GPL 3 und höher. wenn jetzt meine company sagt, wir müssen in P die company-eigenen frontend komponenten (javascript und css) K einbauen, dann würde das doch bedeuten, dass bei der veröffentlichung von P alle K mit ausgeliefert werden müssen. Sind sie dann auch copyleft?
Das ist eine sehr gute und wichtige Frage. Du hast die Ausgangslage korrekt beschrieben:
* **Forgejo steht seit Version 9 unter der GPLv3 (Copyleft)**.
* Eure Firma baut darauf ein neues Produkt **P** auf.
* In **P** sollen proprietäre **Frontend-Komponenten K (JS + CSS)** integriert werden.
* Jetzt ist die Frage: **Werden K dadurch automatisch copyleft (GPL-3-lizenziert)?**
---
### Die juristisch relevante Frage ist:
> **Ist K als „abgeleitetes Werk“ (derivative work) von Forgejo zu betrachten?**
Wenn ja → **GPL-Virus** greift → K müsste **ebenfalls unter der GPL veröffentlicht werden**, sobald P verteilt wird.
Wenn nein → K kann **proprietär** bleiben.
---
### Einschätzung aus der Praxis:
#### 🔹 Forgejo (bzw. Gitea/Gogs) ist eine Webanwendung:
* Typisch: Backend (Go) + Web-Frontend (JS/HTML/CSS).
* GPLv3 umfasst das **gesamte Programm**, auch das Web-Frontend.
#### 🔹 Wenn ihr Frontend-Komponenten K in Forgejo-P einbettet:
* Also z.B. in `templates/*.tmpl` einbindet
* Oder sie mit Forgejos JS interagieren (über globale Objekte, Hooks, Module usw.)
* Oder sie direkt im Forgejo-Build-Prozess enthalten sind
→ Dann sind **K Teil des Gesamtwerks****GPL-pflichtig**, wenn ihr **P verteilt** (z.B. als installierbare Software oder über ein Download-Angebot).
#### 🔹 Wenn ihr P **nur als internen Service** betreibt (also nicht verteilt):
* Dann **greift die GPL nicht**. Die GPL regelt **Verbreitung**, nicht bloße Nutzung (auch intern oder SaaS).
* Ausnahme: Bei AGPL (Affero GPL) wäre das anders. Forgejo nutzt aber **nur GPL**, nicht AGPL.
---
### Fazit:
| Szenario | Müssen K offen gelegt werden? |
| --------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| **P wird nicht verteilt, nur gehostet (z.B. SaaS, internes Portal)** | ❌ Nein, GPL greift hier nicht |
| **P wird an Dritte verteilt (z.B. Kunden, Partner, zum Download)** | ✅ Ja, dann müssen **auch K offen gelegt werden**, wenn sie Teil des Gesamtsystems sind |
---
### Mögliche Strategien:
1. **Frontend-K modularisieren:**
* K **außerhalb** von Forgejo laden (z.B. über CDN, iframe, Microfrontend, WebExtension)
* Dann wäre K kein „abgeleitetes Werk“, sondern „separat“ → GPL greift nicht
2. **Forgejo entkoppeln:**
* Forgejo als **Backend-Komponente** nutzen, euer Portal ist UI-first
* Forgejo läuft z.B. headless oder als API-only-Service
3. **Lizenzpflicht akzeptieren:**
* K offenlegen und unter GPLv3 (oder kompatibler Lizenz) stellen
4. **Lizenzrechtlich beraten lassen:**
* Wenn euer Setup komplizierter ist (z.B. komplexes Zusammenspiel, modulare Bundles), ist eine rechtliche Einschätzung sinnvoll
---
## Headless, separtion of forgejo Frontend and Backend
> angenommen, Forgejo würde sich zu einem headless-Ansatz entwicklen und Frontend und Backend trennen. Und wenn unsere virulenten K Komponenten dann nur im Frontend wären, würde ja dieselbe diskussion gültig sein, diesmal halt nur mit dem Gesamtwerk 'Frontend'. Richtig?
Ganz genau **du hast das Prinzip vollständig verstanden**. Lass uns das nochmal im Detail klarmachen:
---
### 🧠 Grundidee: GPL „infiziert“ das **Gesamtwerk** bei *Verbreitung*
* Ob das „Gesamtwerk“ aus einem **monolithischen Projekt** besteht oder aus **Frontend + Backend getrennt** aufgebaut ist, ist **lizenzrechtlich egal**, solange die Teile als **ein zusammengehöriges Werk** vertrieben werden.
---
### 🔍 Headless Forgejo: Was ändert sich?
Angenommen Forgejo trennt sich vollständig in:
* **Forgejo Backend** (API, Auth, Git, etc.) → GPLv3
* **Forgejo Frontend** (UI, Web-App, REST-Client) → ebenfalls GPLv3
Nun baut ihr euer eigenes Frontend:
* Ihr verwendet Forgejos GPLv3-Frontend als Grundlage
* Ihr integriert eigene proprietäre Komponenten **K** (JS, CSS, React, etc.)
Dann gilt:
> Wenn **euer Frontend P'** auf dem GPLv3-Frontend von Forgejo basiert (also *abgeleitet ist*) und **weitergegeben wird**, dann **muss auch P' unter der GPLv3 stehen**.
→ Und damit **auch K**, wenn sie integraler Bestandteil sind.
---
### 🤔 Was ist „integraler Bestandteil“?
Wenn K z.B.:
* direkt in Forgejo-Frontend eingebunden wird (als Module, React-Components, Styles)
* im Build mit Forgejo-Code gebundled wird (z.B. über Webpack, Vite, Rollup)
* von GPL-Code aufgerufen oder mit GPL-Code gemeinsam ausgeliefert wird
→ Dann ist K **Teil des Frontend-Gesamtwerks** → **GPL-pflichtig**
---
### 🔓 Wie kann man K trotzdem proprietär halten?
Du musst K **technisch und lizenzrechtlich abtrennen**. Das geht z.B. durch:
#### 1. **Frontend-Plugins über offene Schnittstellen (APIs, Hooks)**
* Forgejo lädt externe Komponenten **dynamisch** zur Laufzeit (wie Plugins)
* Plugins liegen **nicht im selben Repository**, werden **nicht mitgebundled**
* Sie kommunizieren z.B. über Events oder JS-APIs
→ Diese Trennung kann stark genug sein, um K **nicht als abgeleitetes Werk** gelten zu lassen.
#### 2. **Microfrontend-Architektur**
* Forgejo-UI + K-Frontend als **völlig getrennte Webapps**
* Sie kommunizieren nur via REST
* Beide haben eigene Buildprozesse, Domains oder Deployments
→ Dann ist K **nur ein separater Client**, der Forgejo nutzt → **kein Copyleft-Risiko**
---
### ⚖️ Kurzes Lizenz-Merkblatt (bei Verteilung):
| Du verwendest... | Und veränderst... | Und verbreitest... | Dann musst du... |
| ---------------- | ----------------- | ------------------------ | ----------------------------------------------- |
| GPL-Frontend | nur API-Aufrufe | Nein | Nichts (Nutzung ist frei) |
| GPL-Frontend | nichts | Ja (z.B. als Proxy-App) | GPL-Code beilegen |
| GPL-Frontend | und fügst K ein | Ja | Dann wird K auch GPL (wenn nicht klar getrennt) |
---
**Fazit:**
Ja, auch bei Headless-Struktur bleibt die Diskussion **identisch**, nur auf **Frontend-Ebene**.
Was zählt, ist **Verbreitung** und **Abhängigkeit**: Wenn ihr Forgejos GPL-Code als **technisches Fundament** für euer eigenes UI nehmt und es **weitergebt**, dann **unterliegt das gesamte resultierende UI dem Copyleft** inklusive eurer Komponenten **K**, falls sie technisch integriert sind.
## Portal as SaaS/PaaS
> ok, und wenn unser P nur als SaaS bzw. PaaS verfügbar wird für Kunden, dann erübrigt sich die ganze Lizenzdiskussion?
Fast aber mit einer wichtigen Einschränkung:
---
### ✅ Ja: Wenn ihr **P nur als SaaS oder PaaS betreibt**, also **nicht verteilt**,
dann **greift die GPLv3 nicht**.
> **Die GPL regelt die *Verbreitung* (distribution)** von Software, **nicht deren Nutzung über ein Netzwerk**.
Das heißt:
* Ihr könnt **Forgejo (GPLv3)** hosten
* Ihr könnt es verändern
* Ihr könnt eigene Komponenten **K (JS/CSS)** integrieren, auch tief im System
* Solange ihr **P nicht als Download oder Produkt weitergebt**,
**müsst ihr keinerlei Quellcode veröffentlichen** auch nicht für K
---
### 🔒 Ausnahme: Die **AGPLv3**
Die **Affero GPLv3** (nicht die normale GPLv3!) **schließt diese Lücke**:
> Wenn Software **über ein Netzwerk bereitgestellt wird**, dann gilt das wie eine „Verbreitung“,
> und ihr müsst den **Quellcode bereitstellen**, inklusive Modifikationen.
Aber:
**Forgejo verwendet nur GPLv3**, **nicht** AGPLv3.
→ Daher **greift diese Ausnahme bei euch nicht**.
---
### 🧠 Fazit
| Szenario | GPLv3-Pflichten? |
| --------------------------------------------- | ------------------------------------------------- |
| P wird nur gehostet (SaaS/PaaS), nie verteilt | ❌ Nein |
| P wird als installierbares Produkt verteilt | ✅ Ja, alle abgeleiteten Werke müssen GPL sein |
| P nutzt AGPL-Komponenten | ⚠️ Ja, auch bei SaaS muss Code offengelegt werden |
---
### 💡 Empfehlung
Wenn ihr **zukünftig eventuell doch distributieren wollt**, wäre es gut, das in der Architektur zu berücksichtigen (z.B. K trennbar halten).
Solange ihr aber rein **als Betreiber eines SaaS/PaaS-Portals** handelt, seid ihr aus GPLv3-Sicht **vollkommen auf der sicheren Seite** auch mit euren proprietären K-Komponenten.
## AGPL vs GPL
> Das bedeutet ja, dass, im Sinne von OS, die AGPL strenger (schützneder) als die GPl ist?
Ganz genau **die AGPL ist eine „strenger schützende“ Lizenz als die GPL**, vor allem im Kontext von Cloud-/SaaS-Anbietern. Hier ist eine kurze, aber präzise Einordnung:
---
### 🔍 Unterschied: GPL vs. AGPL
| Lizenz | Muss Quellcode offengelegt werden bei… | Ziel |
| ---------- | ---------------------------------------------------------------------------------- | ----------------------- |
| **GPLv3** | Nur wenn Software **verbreitet** wird (z.B. Download, Installationspaket) | Schutz bei Distribution |
| **AGPLv3** | Auch wenn Software **nur übers Netzwerk bereitgestellt** wird (z.B. als **SaaS**) | Schutz auch bei Hosting |
---
### 🧠 Was schützt die AGPL mehr?
Die AGPL wurde entwickelt, um die sogenannte **„SaaS-Lücke“** in der GPL zu schließen:
* Viele Unternehmen nahmen GPL-Software, erweiterten sie, **veröffentlichten sie nie**, sondern **hosteten sie einfach als Service**.
* Ergebnis: **Sie profitierten von freier Software, gaben aber nichts zurück** ganz legal unter der GPL.
Die AGPL sagt daher:
> Wenn du Software nutzt, die unter der AGPL steht,
> **und Nutzer über ein Netzwerk mit ihr interagieren können**,
> **musst du deinen geänderten Quellcode offenlegen**
> auch **ohne Verbreitung der Software an sich**.
---
### 🎯 Beispiel aus der Praxis
* GitLab hat früher zwischen:
* **Open-Core GPLv3** (für das Backend),
* und **nicht-freien Premium-Modulen** unterschieden.
* Wäre GitLab stattdessen **AGPL-lizenziert** gewesen, hätten **Cloud-Anbieter wie AWS** den Code nicht einfach benutzen können, ohne ihre Änderungen zu teilen.
---
### 💡 Zusammenfassung
* **GPL schützt Freiheit bei Distribution**
* **AGPL schützt Freiheit auch bei Netzwerk-Zugriff**
* AGPL ist also:
* **restriktiver** für Unternehmen (die Software nur hosten)
* **schutzstärker** im Sinne der Open-Source-Idee
---
Wenn euch also wichtig ist, dass **niemand eure Software nehmen und als Cloud-Dienst hosten kann**, ohne den Code freizugeben, dann ist **AGPL die bessere Wahl**.
Aber für viele Firmen ist genau das der Grund, **AGPL zu vermeiden**, z.B. bei kommerziellem SaaS-Geschäft.
## MIT and LGPL
> Und LGPL und MIT? Wie sind diese Lizenzen in dieser Hinsicht zu bewerten?
Super Frage! Wenn wir GPL, **AGPL**, **LGPL** und **MIT** in Bezug auf **„Schutzwirkung“ im Sinne von Open Source“** vergleichen wollen, entsteht ein ziemlich klar gestaffeltes Bild:
---
### 🧭 Übersicht: GPL, AGPL, LGPL, MIT im Vergleich
| Lizenz | Verbreitungspflicht bei… | „Infiziert“ abgeleitete Werke? | Kommerziell verwendbar? | SaaS-Abdeckung? | Schutzwirkung (Stärke) |
| ---------- | -------------------------------------- | --------------------------------------- | ---------------------------------- | --------------- | ---------------------- |
| **MIT** | Nur bei direkter Weitergabe (optional) | ❌ Nein | ✅ Ja | ❌ Nein | 🔓 *Sehr schwach* |
| **LGPLv3** | Nur bei Verbreitung als *Library* | 🔸 Nur bei statischer/direkter Kopplung | ✅ Ja (dynamische Kopplung erlaubt) | ❌ Nein | ⚖️ *Moderat* |
| **GPLv3** | ✅ Ja, bei Verbreitung | ✅ Ja | ⚠️ Eingeschränkt | ❌ Nein | 🔐 *Stark* |
| **AGPLv3** | ✅ Ja, auch bei SaaS | ✅ Ja | ⚠️ Eingeschränkt | ✅ Ja | 🛡️ *Sehr stark* |
---
### 🔍 Detail: Was bedeuten diese Lizenzen im Alltag?
#### 1. **MIT License**
* Extrem permissiv: „Mach, was du willst aber lass den Lizenztext dran.“
* **Keine Copyleft-Wirkung**
* Unternehmen können MIT-Code integrieren, verändern, verkaufen **ohne irgendetwas offenzulegen**
🔧 **Typisch für:**
* Frontend-Libs (React, Lodash)
* Dev-Tools, CLI-Tools
* Universitätscode
---
#### 2. **LGPL (Lesser GPL)**
* Speziell für **Bibliotheken** entwickelt
* Erlaubt **dynamische Verlinkung** mit proprietärer Software
* Nur wenn du die Library **veränderst** oder **statisch einbindest**, musst du den Quellcode offenlegen
⚠️ **Aber Achtung:** Wenn du z.B. ein JavaScript-Modul *"inplace"* in dein Bundle einbaust, kann das **als „statische Kopplung“** gelten → Copyleft greift!
🔧 **Typisch für:**
* Standard-Bibliotheken wie glibc (GNU C Library)
* Frameworks, die auch kommerziell nutzbar sein sollen
---
#### 3. **GPLv3**
* Klassisches **„starkes Copyleft“**
* Wer verändert + verteilt, muss **den vollständigen Quellcode** offenlegen
* **ABER:** Keine Wirkung bei reinem SaaS-Hosting
🔧 **Typisch für:**
* Linux-Kernel (GPLv2)
* Forgejo, Gitea
* Viele CLI-Tools oder Compiler
---
#### 4. **AGPLv3**
* Wie GPLv3, **plus Netzwerk-Nutzung**
* „Wenn Benutzer über das Internet mit der Software interagieren können, dann musst du auch bei SaaS den Quellcode offenlegen“
🔧 **Typisch für:**
* Self-hosted SaaS-Alternativen (z.B. Matomo, CryptPad, GitLab CE früher)
* Community-Projekte, die „Cloud-Reselling“ verhindern wollen
---
### 🧠 Zusammenfassung als Diagramm
```text
⬆ Schutzwirkung / Copyleft
│ 🛡️ AGPLv3 → verteilt + SaaS → Quellcodepflicht
│ 🔐 GPLv3 → verteilt → Quellcodepflicht
│ ⚖️ LGPLv3 → Libs bei Verlinkung → schwächer
│ 🔓 MIT → keine Pflicht, frei nutzbar
└────────────▶ Freiheit für kommerzielle Nutzung
```
---
### 🔎 Fazit für dich:
Wenn du in deinem Unternehmen:
* **keinen Quellcode offenlegen willst**, ist MIT oder (je nach Fall) LGPL sinnvoll
* **SaaS-only anbietest**, und Open-Source-Code nutzt:
* **MIT, BSD, LGPL → unkritisch**
* **GPL → unkritisch (solange nicht verteilt)**
* **AGPL → kritisch, da *Quellcodeoffenlegungspflicht* trotz SaaS**
## Apache
> kannst du in die obige Analyse noch die Apache Lizenz mit aufnehmen? Also alle schritet 1-4, plus die Zusammanfassung bitte, denn das sieht seeeeht übersichtlich aus, was du da geschrieben hast!
Sehr gern! Hier ist die **erweiterte und überarbeitete Analyse**, diesmal mit der **Apache License 2.0** ergänzt inklusive aller Schritte, Unterschiede und der praktischen Zusammenfassung.
---
### 🧭 Übersicht: MIT, LGPL, GPLv3, AGPLv3, Apache 2.0 im Vergleich
| Lizenz | Verbreitungspflicht bei… | „Infiziert“ abgeleitete Werke? | Kommerziell verwendbar? | SaaS-Abdeckung? | Schutzwirkung |
| -------------- | -------------------------------------------- | ----------------------------------- | ----------------------- | --------------- | -------------------------------- |
| **MIT** | ✅ Nur bei direkter Weitergabe | ❌ Nein | ✅ Ja | ❌ Nein | 🔓 *Sehr schwach* |
| **Apache 2.0** | ✅ Nur bei Weitergabe (wie MIT) | ❌ Nein *(aber inkl. Patentklausel)* | ✅ Ja | ❌ Nein | 🔓 *Schwach* + 🧩 *Patentschutz* |
| **LGPLv3** | ✅ Bei Veränderung oder statischer Verlinkung | 🔸 Teilweise (nur bei Kopplung) | ✅ Ja (mit Vorsicht) | ❌ Nein | ⚖️ *Moderat* |
| **GPLv3** | ✅ Bei jeder Weitergabe | ✅ Ja (alles, was „abgeleitet“ ist) | ⚠️ Eingeschränkt | ❌ Nein | 🔐 *Stark* |
| **AGPLv3** | ✅ Auch bei SaaS/Remote-Zugriff | ✅ Ja | ⚠️ Eingeschränkt | ✅ Ja | 🛡️ *Sehr stark* |
---
### 🔍 Schritt 1: **MIT License**
* Extrem permissiv
* Du kannst fast alles damit machen (auch Closed Source)
* Nur Pflicht: Lizenztext beibehalten
* **Keine** Copyleft-Wirkung
* ⚠️ Keine Patentlizenz (aber selten ein Problem bei typischem JavaScript-Code etc.)
✅ Ideal für: Bibliotheken, die möglichst breit einsetzbar sein sollen
🧩 Kein Schutz gegen „Trittbrettfahrer“, aber maximal kompatibel
---
### 🔍 Schritt 2: **Apache License 2.0**
* Sehr ähnlich zu MIT, aber mit einem großen Zusatz:
* 📄 **Erteilt explizit eine Patentlizenz**
* 🛡️ **Schützt Nutzer davor, von ursprünglichen Autoren verklagt zu werden**
* Keine Copyleft-Wirkung
* Sehr **kompatibel mit kommerziellen Projekten**
* Weit verbreitet in Unternehmen (Google, Apache Software Foundation, etc.)
✅ Ideal für: Große Projekte, bei denen Patentsicherheit wichtig ist (Cloud, Machine Learning, etc.)
---
### 🔍 Schritt 3: **LGPLv3**
* „Mittelweg“ zwischen MIT/Apache und GPL
* Typisch für **dynamisch gelinkte Libraries**
* **Du darfst sie in Closed Source nutzen**, solange du:
* dynamisch linkst,
* **und** keine Änderungen an der LGPL-Bibliothek selbst machst
* Bei **statischer Einbindung**: GPL-Pflichten!
✅ Ideal für: Libraries, die *frei genutzt* werden sollen, ohne dass jedes Projekt unter GPL stehen muss
---
### 🔍 Schritt 4: **GPLv3 / AGPLv3**
#### GPLv3:
* Striktes Copyleft
* Alles, was du daraus baust oder veränderst, **muss auch GPL werden**, sobald du es weitergibst
* **Keine Wirkung bei SaaS**
#### AGPLv3:
* Wie GPLv3, aber **greift auch bei SaaS**
* Nutzer über das Netzwerk = „Verbreitung“ → Quellcodepflicht
✅ Ideal für: Projekte, bei denen sichergestellt werden soll, dass **jede Nutzung** (auch SaaS) zur Veröffentlichung zwingt
---
### 🎯 Zusammenfassung als Diagramm
```text
⬆ Schutzwirkung / Copyleft
│ 🛡️ AGPLv3 → verteilt + SaaS → Quellcodepflicht
│ 🔐 GPLv3 → verteilt → Quellcodepflicht
│ ⚖️ LGPLv3 → bei Kopplung/Änderung → Quellcodepflicht für die Library
│ 🔓 Apache 2 → freie Nutzung, + Patentlizenz
│ 🔓 MIT → freie Nutzung, einfachste Lizenz
└────────────▶ Freiheit für kommerzielle Nutzung
```
---
### 🧠 Praxis-Tipps
| Ziel | Empfohlene Lizenz |
| -------------------------------------------------------------------------------- | --------------------------- |
| Du willst maximale Freiheit für Nutzer und Firmen | **MIT** oder **Apache 2.0** |
| Du baust eine Library, willst Verlinkung erlauben, aber Änderungen offenlegen | **LGPLv3** |
| Du willst, dass alle Ableitungen Open Source bleiben (außer bei SaaS) | **GPLv3** |
| Du willst, dass niemand deinen Code nutzt, ohne ihn offenzulegen auch bei SaaS | **AGPLv3** |
---
## 'Free software forever'
> Der Claim 'will be free forever' lässt sich also nur mit GPL und AGPL verwirklcihen? verstehe ich das richtig? Oder anders: Warum ist Forgejo in v9 zur GPL gewechselt?
Ja, du verstehst das im Kern **richtig** und wir können den Gedanken noch etwas differenzierter ausleuchten.
---
### 🎯 1. „Will be free forever“ Was bedeutet das konkret?
Das ist **kein juristischer Begriff**, sondern ein ideologischer Anspruch:
> ❝ Jeder, der meine Software nutzt, verändert oder weiterverbreitet, muss sie **frei halten**, so wie ich es getan habe. Niemand soll sie einsperren dürfen. ❞
Damit ist gemeint:
* Der Quellcode bleibt **immer offen** (auch bei Ableitungen)
* Niemand darf durch Ableitungen ein **proprietäres Produkt** daraus machen
* Freiheit für alle Nutzer, **nicht nur für den ersten Entwickler**
Das nennt man **„starkes Copyleft“**, und das bieten:
* **GPL (v2, v3)** schützt vor proprietärer Weitergabe
* **AGPL** schützt vor proprietärer Weitergabe **und** vor „SaaS-Einschluss“ (Cloud-Tricks)
---
### ✅ 2. Welche Lizenzen sichern diese Freiheit tatsächlich?
| Lizenz | „Wird für immer frei bleiben“ (auch bei Ableitungen)? |
| -------------------- | -------------------------------------------------------- |
| **AGPLv3** | ✅ Ja selbst bei SaaS |
| **GPLv3** | ✅ Ja bei jeder Weitergabe |
| **LGPLv3** | 🔸 Teilweise nur bei Änderungen an der LGPL-Komponente |
| **MIT / Apache 2.0** | ❌ Nein Ableitungen dürfen Closed Source sein |
Also: **Nur AGPL/GPL können mit gutem Gewissen sagen: *„Will be free forever.“***
---
### 🧩 3. Warum ist **Forgejo** in Version 9 auf **GPLv3+** gewechselt?
Forgejo ist ein **Fork von Gitea**, und dieser Fork entstand aus **Sorge um Community-Eigentum** und langfristige Offenheit.
Mit dem Wechsel zu GPLv3 wollte das Forgejo-Projekt klarstellen:
> 💬 „Unsere Plattform bleibt auf ewig frei. Niemand wird Forgejo nehmen und ein Closed-Source-Projekt daraus machen können, ohne ihre Änderungen offenzulegen.“
#### Hintergrund:
* Forgejo sieht sich als „**Community-controlled GitHub-Alternative**“
* Die GPL verhindert, dass jemand (z.B. ein Cloud-Anbieter oder eine Firma) Forgejo nutzt, verändert und **nicht wieder zurückgibt**
* Bei MIT oder Apache könnte z.B. jemand Forgejo forken, um daraus ein kommerzielles, geschlossenes DevOps-Portal zu bauen völlig legal.
Mit der **GPL** ist das **nicht erlaubt**, sobald der Code weitergegeben wird (z.B. als Binary oder Quellcode).
Mit der **AGPL** wäre sogar **SaaS-Nutzung geschützt** aber Forgejo hat sich (noch?) nicht für AGPL entschieden.
---
### 🏁 Fazit
* Ja: **Nur GPL und AGPL** gewährleisten, dass der Code „für immer frei“ bleibt
* Forgejo wählte GPL, um:
* Copyleft-Schutz zu aktivieren
* Die Community gegen proprietäre Forks zu schützen
* Den Open-Source-Gedanken auf Dauer zu sichern
Wenn du „Free as in freedom“ **rechtlich absichern willst**, führt an **(A)GPL** kaum ein Weg vorbei.
MIT, Apache und LGPL ermöglichen zwar freie Nutzung, aber **keinen dauerhaften Schutz der Freiheit**.
---
## Forgejo and SaaS/PaaS
> Rückfrage zu "Bei MIT oder Apache könnte z.B. jemand Forgejo forken, um daraus ein kommerzielles, geschlossenes DevOps-Portal zu bauen völlig legal.": Das ist doch mit der GPL möglich, weil sie SaaS/PaaS nicht einschliesst ?!
Sehr gute Rückfrage das ist **genau der Knackpunkt**, den viele übersehen.
---
### 🔍 Ja, du hast recht:
**GPL (auch v3)** schützt **nicht** vor der sogenannten:
> **SaaS-Schlupflücke** (auch „ASP loophole“ genannt)
Das bedeutet konkret:
> Ein Anbieter kann ein GPL-lizenziertes Programm **modifizieren**, es **auf Servern betreiben** (z.B. als DevOps-Plattform), es **niemals weitergeben** und somit **nichts zurückgeben müssen**.
---
### 🔁 Was genau *verbietet* die GPL (v3)?
Sie verpflichtet zur **Offenlegung des Quellcodes**, wenn:
* du das Programm **weiterverbreitest** (als Binary oder Source)
* du es **mit anderer Software kombinierst** (dann unter bestimmten Bedingungen auch)
Aber:
> Wenn du das Programm nur **ausführst** (z.B. auf einem eigenen Server) und **nur als Dienst** anbietest **greift die GPL nicht**.
#### Also:
Mit GPL darf jemand Forgejo **modifizieren**, gehostet als z.B. `SuperForgeDevOps.io`, **ohne** den geänderten Code zu veröffentlichen.
Solange er **nichts weitergibt**, **muss er nichts zurückgeben**.
---
### 🛡️ AGPL schließt diese Lücke
Die **AGPL (Affero GPL)** ist eine Erweiterung der GPLv3, und sie **fügt explizit hinzu**:
> **Wenn du das Programm über ein Netzwerk bereitstellst (z.B. SaaS), musst du auch dann den Sourcecode veröffentlichen.**
Damit ist auch das **Servermodell abgedeckt** kein Entkommen durch Hosting.
---
### 📌 Fazit zur Rückfrage
| Lizenz | Schutz vor Closed-Source-Forks | Schutz vor SaaS-Schlupflücke |
| ---------------- | ------------------------------ | ---------------------------- |
| **MIT / Apache** | ❌ nein | ❌ nein |
| **GPLv3** | ✅ ja (bei Weitergabe) | ❌ nein (SaaS erlaubt) |
| **AGPLv3** | ✅ ja | ✅ ja |
➡️ **Forgejo mit GPLv3** schützt vor klassischen **Closed-Source-Distributionen**,
aber **nicht** vor der **„wir hosten es einfach selbst“-Strategie**.
Wenn Forgejo also „vollständige Freiheitserhaltung“ auch im SaaS-Kontext will,
müsste es auf **AGPL** umsteigen.
## Forgejo and SaaS/PaaS - II
> Also war deine Analyse oben in Punkt 3 "Warum ist Forgejo in Version 9 auf GPLv3+ gewechselt?" noch nicht ganz korrekt ... d.h. Forgejo lässt diese Möglichkeit offen (ein Portal auf eines PaaS zu bauen, so wie ich da plane)
Ganz genau **sehr präzise erkannt**.
---
### 🛠️ Korrektur & Präzisierung von Punkt 3:
Meine Aussage in Punkt 3 war **inhaltlich nicht falsch**, aber **nicht vollständig**.
Ich hatte gesagt:
> „Mit der GPL ist das nicht erlaubt, sobald der Code weitergegeben wird (z.B. als Binary oder Quellcode).“
Das stimmt **aber nur bei Weitergabe**.
Ich hätte explizit hinzufügen sollen:
> 🔸 **Die GPL erlaubt es jedoch, modifizierte Versionen privat als Service zu betreiben ohne Quellcodefreigabe.**
---
### 🤝 Richtigstellung in Bezug auf Forgejo:
* Mit der Wahl von **GPLv3+** (nicht AGPL) hat Forgejo:
* ✅ *Copyleft* gegen klassische Forks durch Distribution geschützt
* ❌ *Keinen Schutz* gegen **SaaS-only Forks** geschaffen
Das heißt für dich:
> Du darfst Forgejo modifizieren (inkl. Frontend, z.B. zu einem Portal), und **solange du P nur als PaaS anbietest**, **bist du GPL-konform** **auch wenn du den Quellcode deiner Erweiterungen nicht veröffentlichst**.
---
### Warum dann überhaupt GPL und nicht MIT?
Forgejo wollte vermutlich:
* den **klassischen Missbrauch** (Closed-Source-Forks, OEMs, Redistribution als Produkt) **verhindern**
* aber trotzdem eine gewisse **SaaS-Offenheit** erlauben, z.B.:
* für Hoster
* für Unternehmen, die Forgejo intern/extern als Plattform verwenden
* für Partner wie dich, die es als Basis in Produkten einsetzen
Eine **AGPL** hätte potenziell:
* zu mehr **rechtlicher Unsicherheit** geführt
* Hosting-Anbieter **abgeschreckt**
* weniger Verbreitung ermöglicht
Das ist oft ein **strategischer Trade-off**:
**Mehr Kontrolle** (AGPL) vs. **mehr Adaption & Akzeptanz** (GPL).
---
### 🔍 Fazit zu deiner Einschätzung:
> **„Forgejo lässt die Möglichkeit offen, ein Portal auf PaaS-Basis zu bauen.“**
✅ **Richtig.**
Solange du nichts **weitergibst** (Binary, Container, Installationspaket), bist du **nicht verpflichtet**, den Quellcode deiner Erweiterungen zu veröffentlichen trotz GPLv3.
---

View file

@ -0,0 +1,16 @@
---
title: Gitops
weight: 1
description: Gitops scenarios
---
WiP - this is in work.
What kind of Gitops do we have with idpbuilder/CNOE ?
## References
https://github.com/gitops-bridge-dev/gitops-bridge
![alt text](image.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

View file

@ -0,0 +1,34 @@
---
title: Orchestration
weight: 1
description: Usage scenarios and system architecture of platform orchestartion
---
WiP - this is in work.
What deployment scenarios do we have with idpbuilder/CNOE ?
## References
* Base Url of CNOE presentations: https://github.com/cnoe-io/presentations/tree/main
### CNOE in EKS
The next chart shows a system landscape of CNOE orchestration.
[2024-04-PlatformEngineering-DevOpsDayRaleigh.pdf](https://github.com/cnoe-io/presentations/blob/main/2024-04-PlatformEngineering-DevOpsDayRaleigh.pdf)
Questions: What are the degrees of freedom in this chart? What variations with respect to environments and environmnent types exist?
![alt text](image.png)
### CNOE in AWS
The next chart shows a context chart of CNOE orchestration.
[reference-implementation-aws](https://github.com/cnoe-io/reference-implementation-aws)
Questions: What are the degrees of freedom in this chart? What variations with respect to environments and environmnent types exist?
![alt text](image-1.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 932 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

View file

@ -0,0 +1,6 @@
title: Concepts
arrange:
- overview.md
- general
- customer-developer
- edp-developer

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

View file

@ -0,0 +1,95 @@
---
title: Stakeholder Workshop Intro
weight: 50
description: An overall eDF introduction for stakeholders
linktitle: Stakeholder Workshops
---
## Edge Developer Framework Solution Overview
> This section is derived from [conceptual-onboarding-intro](../conceptual-onboarding/1_intro/)
1. As presented in the introduction: We have the ['Edge Developer Framework'](./edgel-developer-framework/). \
In short the mission is:
* Build a european edge cloud IPCEI-CIS
* which contains typical layers infrastructure, platform, application
* and on top has a new layer 'developer platform'
* which delivers a **cutting edge developer experience** and enables **easy deploying** of applications onto the IPCEI-CIS
2. We think the solution for EDF is in relation to ['Platforming' (Digital Platforms)](../conceptual-onboarding/3_platforming/)
1. The next evolution after DevOps
2. Gartner predicts 80% of SWE companies to have platforms in 2026
3. Platforms have a history since roundabout 2019
4. CNCF has a working group which created capabilities and a maturity model
3. Platforms evolve - nowadys there are [Platform Orchestrators](../conceptual-onboarding/4_orchestrators/)
1. Humanitec set up a Reference Architecture
2. There is this 'Orchestrator' thing - declaratively describe, customize and change platforms!
4. Mapping our assumptions to the [CNOE solution](../conceptual-onboarding/5_cnoe/)
1. CNOE is a hot candidate to help and fulfill our platform building
2. CNOE aims to embrace change and customization!
## 2. Platforming as the result of DevOps
### DevOps since 2010
![alt text](DevOps-Lifecycle.jpg)
* from 'left' to 'right' - plan to monitor
* 'leftshift'
* --> turns out to be a right shift for developers with cognitive overload
* 'DevOps isd dead' -> we need Platforms
### Platforming to provide 'golden paths'
> don't mix up 'golden paths' with pipelines or CI/CD
![alt text](../conceptual-onboarding/3_platforming/humanitec-history.png)
#### Short list of platform using companies
As [Gartner states](https://www.gartner.com/en/newsroom/press-releases/2023-11-28-gartner-hype-cycle-shows-ai-practices-and-platform-engineering-will-reach-mainstream-adoption-in-software-engineering-in-two-to-five-years): "By 2026, 80% of software engineering organizations will establish platform teams as internal providers of reusable services, components and tools for application delivery."
Here is a small list of companies alrteady using IDPs:
* Spotify
* Airbnb
* Zalando
* Uber
* Netflix
* Salesforce
* Google
* Booking.com
* Amazon
* Autodesk
* Adobe
* Cisco
* ...
## 3 Platform building by 'Orchestrating'
So the goal of platforming is to build a 'digital platform' which fits [this architecture](https://www.gartner.com/en/infrastructure-and-it-operations-leaders/topics/platform-engineering) ([Ref. in German)](https://www.gartner.de/de/artikel/was-ist-platform-engineering):
![alt text](image.png)
### Digital Platform blue print: Reference Architecture
The blue print for such a platform is given by the reference architecture from Humanitec:
[Platform Orchestrators](../conceptual-onboarding/4_orchestrators/)
### Digital Platform builder: CNOE
Since 2023 this is done by 'orchestrating' such platforms. One orchestrator is the [CNOE solution](../conceptual-onboarding/5_cnoe/), which highly inspired our approach.
In our orchestartion engine we think in 'stacks' of 'packages' containing platform components.
## 4 Sticking all together: Our current platform orchestrating generated platform
Sticking together the platforming orchestration concept, the reference architecture and the CNOE stack solution, [this is our current running platform minimum viable product](../plan-in-2024/image-2024-8-14_10-50-27.png).
This will now be presented! Enjoy!

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

View file

@ -0,0 +1,10 @@
title: edgeDeveloper Framework
arrange:
- storyline.md
- introduction.md
- edge-developer-framework.md
- platforming.md
- orchestrators.md
- cnoe.md
- cnoe-showtime.md
- conclusio.md

Binary file not shown.

After

Width:  |  Height:  |  Size: 904 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 600 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 397 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 397 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Some files were not shown because too many files have changed in this diff Show more