@@ -23,28 +23,88 @@ some point.
23
23
24
24
## What 3C users should know about the development process
25
25
26
- Development of 3C is led by [ Correct Computation,
27
- Inc.] ( https://correctcomputation.com/ ) (CCI) in the
26
+ Checked C development as a whole is led by Microsoft in the
27
+ https://github.com/microsoft/checkedc-clang repository. 3C is included
28
+ in the Checked C codebase, but 3C development is led by [ Correct
29
+ Computation, Inc.] ( https://correctcomputation.com/ ) (CCI) in the
28
30
https://github.com/correctcomputation/checkedc-clang repository, which
29
- is a fork of Microsoft's Checked C repository
30
- ( https://github.com/microsoft/checkedc-clang ). Issues and pull
31
- requests related to 3C should be submitted to the CCI repository; see
32
- [ CONTRIBUTING.md ] ( CONTRIBUTING.md ) for more information. Changes are
33
- merged frequently from Microsoft's repository to CCI's and less
34
- frequently in the opposite direction. While some automated tests of 3C
35
- are run in Microsoft's repository, the coverage of these tests is
36
- currently mediocre , so changes to Microsoft's repository may break
37
- some functionality of its copy of 3C. Thus, users of 3C can choose
38
- either CCI's repository (for the latest 3C with a somewhat older
39
- Checked C) or Microsoft's (for the latest Checked C with 3C that is
40
- significantly older and possibly broken). This workflow may change in
41
- the future .
42
-
43
- As of November 2020 , 3C is pre-alpha quality and we are just starting
31
+ is a fork of Microsoft's repository; changes are periodically merged
32
+ back and forth. (That is, CCI plays roughly the role of a [ "subsystem
33
+ maintainer" ] ( https://www.kernel.org/doc/html/latest/process/2.Process.html#how-patches-get-into- the-kernel )
34
+ for 3C, for those familiar with that term from Linux kernel
35
+ development.) Both 3C and the rest of the Checked C tools (including
36
+ the compiler) are available in both repositories, but the repositories
37
+ will generally have different versions of different parts of the code
38
+ at any given time , so [ you'll have to decide which repository is more
39
+ suitable for your work ] ( #which-checkedc-clang-repository-to-use ) .
40
+
41
+ Issues and pull requests related to 3C should be submitted to CCI's
42
+ repository; see [ CONTRIBUTING.md ] ( CONTRIBUTING.md ) for more
43
+ information .
44
+
45
+ As of March 2021 , 3C is pre-alpha quality and we are just starting
44
46
to establish its public presence and processes. CCI is also working on
45
47
a proprietary extension of 3C called 5C ("** C** orrect
46
48
** C** omputation's ** C** hecked-** C** -** C** onvert"). Our current plan is
47
49
that 3C will contain the core inference logic, while 5C will add
48
50
features to enhance developer productivity. If you'd like more
49
51
information about 5C, please contact us at
50
52
53
+
54
+ ### Which ` checkedc-clang ` repository to use?
55
+
56
+ We typically recommend that serious 3C users use CCI's repository to
57
+ get 3C fixes and enhancements sooner, but in some scenarios, you may
58
+ be better off with Microsoft's repository. Here, in detail, are the
59
+ factors we can think of that might affect your decision (as of
60
+ March 2021):
61
+
62
+ - CCI strives to merge changes reasonably quickly from Microsoft's
63
+ repository to CCI's, but most 3C-specific changes are made first in
64
+ CCI's repository and merged to Microsoft's in batches every few
65
+ months. Thus, CCI's repository typically gives you a significantly
66
+ newer version of 3C, while Microsoft's repository typically gives
67
+ you a somewhat newer version of the rest of the Checked C codebase,
68
+ including some shared code used by 3C. The implication of that last
69
+ point is that a fix to the shared code in Microsoft's repository
70
+ would benefit Microsoft's copy of 3C immediately but would not take
71
+ effect on CCI's copy until the next merge from Microsoft to CCI, so
72
+ CCI's copy of 3C is not always newer in _ all_ respects.
73
+
74
+ - While the [ 3C regression tests] ( CONTRIBUTING.md#testing ) are run on
75
+ every change to either repository, CCI's copy of 3C undergoes
76
+ additional testing: a set of "benchmark" tests that run nightly,
77
+ plus manual use by CCI engineers. If a change to CCI's repository
78
+ passes the regression tests but breaks the additional tests, we will
79
+ generally fix the problem quickly. But if the same happens in
80
+ Microsoft's repository, functionality of Microsoft's copy of 3C that
81
+ is not covered by the regression tests could remain broken for some
82
+ time. The problem would likely be detected the next time CCI tries
83
+ to merge from Microsoft, in which case we would try to get a fix
84
+ into Microsoft's repository reasonably quickly.
85
+
86
+ - The 3C regression tests are run regularly on Windows on Microsoft's
87
+ repository but not on CCI's. A change that breaks the regression
88
+ tests on Windows generally won't be made to Microsoft's repository,
89
+ but such a change could be made to CCI's and the problem may not be
90
+ detected until the next time CCI tries to merge to Microsoft (or a
91
+ user reports the problem to us). So you're less likely to encounter
92
+ Windows-specific problems with Microsoft's repository.
93
+
94
+ - On the other hand, some CCI engineers work on Mac OS X and
95
+ frequently run the regression tests and other manual tests on CCI's
96
+ copy of 3C on Mac OS X, while we are unaware of any testing of
97
+ Microsoft's copy of 3C on Mac OS X. So you may be less
98
+ likely to encounter Mac-specific problems with CCI's repository. But
99
+ so far, when we've seen Mac-specific problems, we've usually gotten
100
+ a fix into Microsoft's repository reasonably quickly.
101
+
102
+ As noted in the [ setup instructions] ( INSTALL.md#basics ) , both 3C and
103
+ the Checked C compiler depend on the Checked C system headers, which
104
+ Microsoft maintains in [ a subdirectory of a separate repository named
105
+ ` checkedc ` ] ( https://github.com/microsoft/checkedc/tree/master/include ) .
106
+ CCI has [ a fork of this
107
+ repository] ( https://github.com/correctcomputation/checkedc ) , but
108
+ currently it is used only for submitting changes to Microsoft. All
109
+ users should use Microsoft's ` checkedc ` repository regardless of which
110
+ ` checkedc-clang ` repository they use.
0 commit comments