-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathmaturity.html
More file actions
469 lines (339 loc) · 22.4 KB
/
maturity.html
File metadata and controls
469 lines (339 loc) · 22.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
<!DOCTYPE html>
<html lang="en">
<head>
<title>Maturity Model | Grails® Framework</title>
<meta name="keywords" content="grails,jvm,framework,groovy,gradle,spring-boot,gorm"/>
<meta name="description" content="A powerful Groovy-based web application framework for the JVM built on top of Spring Boot"/>
<meta name="date" content="April 10, 2026"/>
<meta name="robots" content="all"/>
<link rel="alternate" type="application/rss+xml" title="RSS" href="https://grails.apache.org/rss.xml"/>
<meta charset='UTF-8'/>
<link rel='icon' href='https://grails.apache.org/images/favicon.ico'/>
<meta name='twitter:card' content='summary_large_image'/>
<meta name='twitter:site' content='@grailsframework'/>
<meta name='twitter:description' content='A powerful Groovy-based web application framework for the JVM built on top of Spring Boot'/>
<meta name='twitter:creator' content='@grailsframework'/>
<meta property='og:image' content='https://grails.apache.org/images/grails.png'/>
<meta property='og:url' content='https://grails.apache.org/maturity.html'/>
<meta property='og:title' content='Maturity Model | Grails® Framework'/>
<meta property='og:description' content='A powerful Groovy-based web application framework for the JVM built on top of Spring Boot'/>
<meta property='og:type' content='website'/>
<meta name='viewport' content='width=device-width, initial-scale=1'/>
<link rel='mask-icon' href='https://grails.apache.org/images/grails-pinned-icon.svg' color='feb672'/>
<link rel='stylesheet' href='https://grails.apache.org/stylesheets/screen.css'/>
<link rel='stylesheet' href='https://grails.apache.org/stylesheets/plugin.css'/>
<link rel='stylesheet' href='https://grails.apache.org/stylesheets/paginate.css'/>
<script src='https://grails.apache.org/javascripts/navigation.js'></script>
<script src='https://grails.apache.org/javascripts/paginate.js'></script>
<link rel='stylesheet' href='https://grails.apache.org/stylesheets/support.css'/>
<script src='https://grails.apache.org/javascripts/plugins.js'></script>
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['setDoNotTrack', true]);
_paq.push(['disableCookies']);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u = 'https://analytics.apache.org/';
_paq.push(['setTrackerUrl', u + 'matomo.php']);
_paq.push(['setSiteId', '79']);
var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0];
g.async = true; g.src = u + 'matomo.js'; s.parentNode.insertBefore(g, s);
})();
</script>
<!-- End Matomo Code -->
<script
async
src="https://widget.kapa.ai/kapa-widget.bundle.js"
data-website-id="d804a9f2-51a2-414c-97f7-12f2a1ba4609"
data-project-name="Apache Grails"
data-project-color="#3F4346"
data-font-family="system-ui,-apple-system,BlinkMacSystemFont,Roboto,Helvetica,Arial,Segoe UI,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;"
data-project-logo="https://grails.apache.org/images/grails.png"
data-modal-override-open-id="ask-ai-input"
data-modal-override-open-class="search-input"
data-user-analytics-fingerprint-enabled="true"
data-modal-title="Apache Grails AI Assistant"
data-modal-example-questions-title="Try asking me..."
data-modal-disclaimer="This is a custom LLM for Apache Grails using [documentation](https://docs.grails.org/latest/), [groovy documentation](https://docs.groovy-lang.org/docs/groovy-4.0.28/html/documentation/) [github issues](https://github.com/apache/grails-core/issues) and more.
Companies deploy assistants like this [](https://kapa.ai) on docs via [website widget](https://docs.kapa.ai/integrations/website-widget) (Docker, Reddit), in [support forms](https://docs.kapa.ai/integrations/support-form-deflector) for ticket deflection (Monday.com, Mapbox), or as [an internal assistant](https://docs.kapa.ai/integrations/internal-assistant) with access to private sources."
data-modal-example-questions="How does database migration work?,How does Spring Security work?"
data-button-text-color="#FBB576"
data-modal-header-bg-color="#FFFFFF"
data-modal-title-color="#FBB576"
data-consent-required="true"
data-consent-screen-disclaimer="By clicking "I agree, let's chat", you consent to the use of the AI assistant in accordance with kapa.ai's [Privacy Policy](https://www.kapa.ai/content/privacy-policy). This service uses reCAPTCHA, which requires your consent to Google's [Privacy Policy](https://policies.google.com/privacy) and [Terms of Service](https://policies.google.com/terms). By proceeding, you explicitly agree to both kapa.ai's and Google's privacy policies.">
</script>
</head>
<body>
<header class='main-header'>
<div class='content'>
<a href='https://grails.apache.org/index.html'><img class='grails-logo' src='https://grails.apache.org/images/grails_logo.svg' alt='Grails Logo'/></a>
<a href='javascript:show("top-menus", "show-navigation-link")' id='show-navigation-link'
class='mobile align-center'>Show Navigation</a>
<div id='top-menus'>
<nav class='secondary-menu' id='secondary-menu'>
<ul>
<li><a href='https://grails.apache.org/casestudies/index.html'>Case Studies</a></li>
<li><a href='https://grails.apache.org/blog/index.html'>Blog</a></li>
<li><a href='https://grails.apache.org/learning.html'>Learning</a></li>
<li><a href='https://grails.apache.org/community.html'>Community</a></li>
<li><a href='https://grails.apache.org/search.html'>Search</a></li>
</ul>
</nav>
<nav class='main-menu' id='main-menu'>
<ul>
<li><a href='https://grails.apache.org/documentation.html'>Documentation</a></li>
<li><a href='https://grails.apache.org/download.html'>Download</a></li>
<li><a href='https://grails.apache.org/plugins.html'>Plugins</a></li>
<li><a href='https://guides.grails.org/index.html'>Guides</a></li>
<li><a href='https://grails.apache.org/faq.html'>FAQ</a></li>
<li><a href='https://grails.apache.org/support.html'>Support</a></li>
<li><a href='https://start.grails.org'>Forge App</a></li>
</ul>
</nav>
</div>
</div>
</header>
<article><div class='header-bar chalices-bg'>
<div class='content'>
<h1>Maturity Model</h1>
</div>
</div>
<div class='content'>
<article>
<p>
<em>This page reflects the Apache Grails project's self-assessment of their maturity according to the
<a href="https://community.apache.org/apache-way/apache-project-maturity-model.html">ASF Project
Maturity Model</a>.</em>
</p>
<h2>Code</h2>
<h3>CD10</h3>
<p>The project produces Open Source software for distribution to the public at no charge.</p>
<p>All code is under the Apache license (or compatible 3rd party licenses) and available from ASF distribution
channels and GitHub.</p>
<h3>CD20</h3>
<p>Anyone can quickly discover and access the project's code.</p>
<p>The code is available under ASF/GitHub, and the project’s website contains instructions on how to obtain it.
</p>
<h3>CD30</h3>
<p>Anyone using standard, widely available tools can build the code reproducibly.</p>
<p>The project includes instructions on required prerequisites and instructions on how to build the software.
</p>
<h3>CD40</h3>
<p>The complete history of the project's code is available via a source code control system, which allows anyone
to recreate any released version.</p>
<p>The latest code is available from ASF/GitHub, and previous versions have been tagged. Previous releases since
joining are archived at the ASF and available for download.</p>
<h3>CD50</h3>
<p>The source code control system establishes the provenance of each line of code in a reliable way, based on
strong authentication of the committer.</p>
<p>When third parties contribute code, commit messages provide reliable information about the code provenance.
All code is committed via version control. The LICENSE file also lists 3rd party code and its license.</p>
<h2>Licenses and Copyright</h2>
<h3>LC10</h3>
<p>The Apache License, version 2.0, covers the released code.</p>
<p>The code is licensed under the Apache License 2.0.</p>
<h3>LC20</h3>
<p>Libraries that are mandatory dependencies of the project's code do not create more restrictions than the
Apache License does.</p>
<p>Extensive work has been done on third-party licenses for both the source release and convenience binaries.
One issue with a Hibernate dependency has been discussed and is subject to further resolution but isn't the
sole mandatory option for this functionality.
Further work is expected to remove the licensing issue with this dependency.</p>
<h3>LC30</h3>
<p>The libraries mentioned in LC20 are available as Open Source software.</p>
<p>All mandatory dependencies are open source software.</p>
<h3>LC40</h3>
<p>Committers are bound by an Individual Contributor Agreement (the "Apache iCLA") that defines which code they
may commit and how they need to identify code that is not their own.</p>
<p>All committers have signed ICLAs.</p>
<h3>LC50</h3>
<p>The project clearly defines and documents the copyright ownership of everything that the project produces.
</p>
<p>The LICENSE and NOTICE files list additional information needed here.</p>
<h2>Releases</h2>
<h3>RE10</h3>
<p>Releases consist of source code, distributed using standard and open archive formats that are expected to
stay readable in the long term.</p>
<p>Releases are source code and are performed and distributed in the standard ASF way.</p>
<h3>RE20</h3>
<p>The project's PMC (Project Management Committee, see CS10) approves each software release to make the release
an act of the Foundation.</p>
<p>Each release has been voted on, following ASF policy, by the PPMC.</p>
<h3>RE30</h3>
<p>Releases are signed and/or distributed along with digests that anyone can reliably use to validate the
downloaded archives.</p>
<p>Releases are signed and the release area on the website includes hashes and links to KEYs files.</p>
<h3>RE40</h3>
<p>The project can distribute convenience binaries alongside source code, but they are not Apache Releases, they
are provided with no guarantee.</p>
<p>Convenience binaries are distributed alongside source releases. Their LICENSE and NOTICE files are correct.
</p>
<h3>RE50</h3>
<p>The project documents a repeatable release process so that someone new to the project can independently
generate the complete set of artifacts required for a release.</p>
<p>Releases have been made by several release managers and the project includes documentation on how to make a
release. The last release included a standard incubating DISCLAIMER. There is some minor work to be done on
documenting the release process and improving the release scripts.</p>
<h2>Quality</h2>
<h3>QU10</h3>
<p>The project is open and honest about the quality of its code. Various levels of quality and maturity for
various modules are natural and acceptable as long as they are clearly communicated.</p>
<p>All code is reviewed by at least one committer before being merged and must pass CI checks.</p>
<h3>QU20</h3>
<p>The project puts a very high priority on producing secure software.</p>
<p>The project uses various automation processes to ensure dependencies are kept up to date.</p>
<h3>QU30</h3>
<p>The project provides a well-documented, secure and private channel to report security issues, along with a
documented way of responding to them.</p>
<p>The project uses the standard way of reporting ASF security issues.</p>
<h3>QU40</h3>
<p>The project puts a high priority on backwards compatibility and aims to document any incompatible changes and
provide tools and documentation to help users transition to new features.</p>
<p>All PRs, including information on if there are breaking changes, and release notes on each release, also
include this.</p>
<h3>QU50</h3>
<p>The project strives to respond to documented bug reports in a timely manner.</p>
<p>The large majority of issues and PRs are dealt with quickly, although a number of outstanding older issues
from pre-ASF days remain.</p>
<h2>Community</h2>
<h3>CO10</h3>
<p>The project has a well-known homepage that points to all the information required by ASF policy.</p>
<p>The Grails website (https://grails.apache.org) is well known and contains all the information needed by ASF
policy. (A couple of points need fixing before this is actually true, but they are well-known and simple.)
</p>
<h3>CO20</h3>
<p>The community welcomes contributions from anyone who acts in good faith, respectfully, and adds value to the
project.</p>
<p>Several hundred folks have contributed to the core Grails project during its lifespan and more on plugins.
More than 20 folks have contributed to the core project since incubation started. Several contributors have
been made committers and PMC members since the start of incubation.</p>
<h3>CO30</h3>
<p>Contributions include source code, documentation, constructive bug reports, constructive discussions,
marketing and generally anything that adds value to the project.</p>
<p>The project values all forms of contribution and has accepted code, documentation fixes/improvements, bug
reports etc.</p>
<h3>CO40</h3>
<p>The community strives to be meritocratic and gives more rights and responsibilities to contributors who, over
time, add value to the project.</p>
<p>Several contributors have been made committers and PPMC members since the start of incubation.</p>
<h3>CO50</h3>
<p>The project documents how contributors can earn more rights, such as commit access or decision power, and
applies these principles consistently.</p>
<p>Several contributors have been made committers and PMC members since the start of incubation. These
committers have been based on merit and come from several different employers.</p>
<h3>CO60</h3>
<p>The community operates based on the consensus of its members (see CS10), who have decision power. Dictators,
benevolent or not, are not welcome in Apache projects.</p>
<p>The project’s direction is set by the PMC, there is no BDFY.</p>
<h3>CO70</h3>
<p>The project strives to answer user questions in a timely manner.</p>
<p>User questions on GitHub and the mailing list are usually answered promptly. There is room for improvement in
a few isolated cases.</p>
<h2>Consensus Building</h2>
<h3>CS10</h3>
<p>The project maintains a public list of its contributors who have decision power. The project's PMC (Project
Management Committee) consists of those contributors.</p>
<p>The PPMC and committer list are kept up to date when new people are added. There is no public list of the PMC
on the site, but it is available via several ASF services.</p>
<h3>CS20</h3>
<p>Decisions require a consensus among PMC members and are documented on the project's main communications
channel. The PMC takes community opinions into account, but the PMC has the final word.</p>
<p>Votes on releases and other major decisions are conducted on the mailing list.</p>
<h3>CS30</h3>
<p>The project uses documented voting rules to build consensus when discussion is not sufficient.</p>
<p>There has been no need to use voting in this way so far.</p>
<h3>CS40</h3>
<p>In Apache projects, vetoes are only valid for code commits. The person exercising the veto must justify it
with a technical explanation, as per the Apache voting rules defined in CS30.</p>
<p>There have been no code vetos. Most significant code contributions use RTC, so this reduces the number of
possible vetos. The code is reviewed, and feedback is acted on before it is merged.</p>
<h3>CS50</h3>
<p>All "important" discussions happen asynchronously in written form on the project's main communications
channel. Offline, face-to-face or private discussions that affect the project are also documented on that
channel.</p>
<p>There is discussion on the mailing list, and in GitHub issues and discussions. This is asynchronous. There
are regular online meetings where anyone is welcome and a summary of discussions is brought back to the
mailing list.
There are no offline meetings or discussions where private decisions are made.</p>
<h2>Independence</h2>
<h3>IN10</h3>
<p>The project is independent of any corporate or organizational influence.</p>
<p>The active contributors are from a diverse range of organisations.</p>
<h3>IN20</h3>
<p>Contributors act as themselves, not as representatives of a corporation or organization.</p>
<p>Individuals do act independently and for the community and project as a whole.</p>
<h2>Trademark and Branding</h2>
<h3>TB10</h3>
<p>The project uses "Apache Foo™" as the project and software product name consistently, with appropriate
trademark attributions.</p>
<p>The project uses Apache Grails and complies with ASF trademark policy.</p>
<h3>TB20</h3>
<p>The project's primary homepage is at projectname.apache.org. When exceptions exist to use alternate domains
for any purpose, any non-apache.org domain names are owned by the ASF.</p>
<p>The project's website is at https://grails.apache.org.</p>
<h3>TB30</h3>
<p>The ASF has trademark rights, including any registrations, to the project name, logo, and any other major
branding elements.</p>
<p>The name Grails and its logo is a registered trademark and agreement has been reached to transfer the
trademarks to the ASF upon successful graduation.</p>
<h3>TB40</h3>
<p>The project monitors for any major misuses of their project's brand by others, and reports any potential
misuses to Brand Management.</p>
<p>There have been no significant misuses of the project’s brand.</p>
</article>
</div> </article>
<footer>
<div class='content'>
<div class='apache-grails'>
<p>Apache Grails is supported by the Apache Software Foundation and the Grails community.</p>
<a href='https://apache.org'><img src='https://www.apache.org/img/asf_logo.png' width='200px' alt='Apache Software Foundation'/></a>
<p>Apache, Apache Grails, Grails, Groovy, and the ASF logo are either registered trademarks or trademarks of The Apache Software Foundation.</p>
</div>
<nav class='social-media-nav'>
<ul>
<li>
<a href='mailto:dev@grails.apache.org'><img src='https://grails.apache.org/images/email.svg' alt='Email Icon'/></a>
</li>
<li>
<a href='https://slack.grails.org'><img src='https://grails.apache.org/images/slack.svg' alt='Slack Icon'/></a>
</li>
<li>
<a href='https://www.youtube.com/@GrailsFramework'><img src='https://grails.apache.org/images/youtube.svg' alt='Youtube Icon'/></a>
</li>
<li>
<a href='https://bsky.app/profile/grails.apache.org'><img src='https://grails.apache.org/images/bsky.svg' alt='Bluesky Icon'/></a>
</li>
<li>
<a rel="me" href="https://fosstodon.org/@grails"><img src='https://grails.apache.org/images/mastodont.svg' alt='Mastodont Icon'/></a>
</li>
<li>
<a href='https://www.linkedin.com/showcase/official-grails/'><img src='https://grails.apache.org/images/linkedin.svg' alt='LinkedIn Icon'/></a>
</li>
<li>
<a href='https://github.com/apache/grails-core'><img src='https://grails.apache.org/images/github.svg' alt='Github Icon'/></a>
</li>
<li>
<a href='https://twitter.com/grailsframework'><img src='https://grails.apache.org/images/x-twitter.svg' alt='Twitter Icon'/></a>
</li>
</ul>
</nav>
</div>
<div class='footer-bottom'>
<p>© 2005-2026 the Apache Grails project</p>
<p>Grails is Open Source:
<a href='https://www.apache.org/licenses/'>License</a>,
<a href='https://privacy.apache.org/policies/privacy-policy-public.html'>Privacy Policy</a>,
<a href='https://www.apache.org/foundation/sponsorship'>Sponsor Apache</a>,
<a href='https://www.apache.org/events/current-event'>Events</a>,
<a href='https://www.apache.org/security'>Security</a>,
<a href='https://www.apache.org/foundation/thanks.html'>Thanks</a>,
<a href='https://grails.apache.org/support-schedule.html'>Support Schedule</a>
</p>
</div>
</footer>
</body>
</html>