└── README.md /README.md: -------------------------------------------------------------------------------- 1 | 2 | # crDroidAndroid Official Requirements 3 | --- 4 | This repository contains quality requirements for every device maintainer. 5 | Rules are established by crDroid core team to meet same standards on every 6 | device, keep users' data safe and enhance their experience. 7 | 8 | ### General rules 9 | * All maintainers must have knowledge about source control tools such as *git* and *repo*. 10 | * All maintainers must release device sources **publicly** at crDroid Android organization on Github, here includes common device tree (if present), device tree and kernel 11 | * Device tree and device specifc sources need to be cloned via crdroid.dependencies and not via vendorsetup.sh script at built time (that if you want to clone stuff at build time) 12 | * Vendor is not mandatory due to possible proprietary code that can result in DMCA, but highly recommended also 13 | * All sources must be fully synced (pushed to GitHub) **prior to** every official build release 14 | * Device trees can be co-maintained 15 | * All maintainers must test every build before release this including with testers if possible in order to avoid issues 16 | * If some quality requirements (*more on that below*) can’t be passed, the maintainer must provide the reason for the exception while applying for maintainer status 17 | * Maintainers must respect each other, any act of hate or abuse will be severely punished 18 | * A forum thread (usually XDA) must be made using official template and contain all the device documentation such as installation steps, download links, sources 19 | * Starting with crDroid 11, is manadatory to have install instructions added to [install_docs](https://github.com/crdroidandroid/install_docs) repo. 20 | 21 | ### Communication and chat rules 22 | * The team communicates using Telegram group chat that you'll get an invite to when applying 23 | * PMs should be avoided as much as possible so all users can participate in a discussion 24 | * Mentions shouldn’t be misused nor notifying too many (possibly unrelated) people, when mentioning try to describe the problem as much as possible, avoid mentions that forces the person to read the whole conversation (e.g. *‘@devnick Can you help???’* in the middle of 20 messages long conversation, instead use *‘@devnick I get an error x when compiling y after adding z, do you have any idea about it?’*) 25 | * Don’t spam about any ETAs, upcoming source updates or features to add 26 | * We encourage features to be added via pull request, so we can review code and decide to implement 27 | * Specific bugs should be reported via Github *Issue* section in the affected repository or via [issue_tracker](https://github.com/crdroidandroid/issue_tracker/issues/new/choose) 28 | * Feature requests should be made using *Pull Requests* with a properly prepared and **tested** commits 29 | 30 | ### Git: 31 | * Git trees should be maintained in a tidy and organized manner 32 | * Release branches (ones that are used for official releases) must be named after current Android version, e.g. Android 12L -branch_name-> 12.1, this naming is mandatory (excluding cases described at the next point) 33 | * In the case of incompatibility with current, already hosted device sources, maintainers will need to create a dedicated branch for their device on said repos (eg. *12.1-cepheus*) 34 | * Maintainers are free to create additional backup/testing branches 35 | * Original commit authorship must be maintained. If you modified it by some degree (forward port, conflict fix) you can leave a signoff or add your note at the end of a commit message, e.g. *'xNombre: fixed for R'* 36 | Commits must preserve proper and informative naming, e.g. *'sm6150-common: Add missing camera prop'* no *'fix cam'* or *'aldksjflkajsd'*. For kernels shortened path or affected source file must be used for name, e.g. *'block: cfq: Fix uninitialized variable'* or *'adsprpcd: Fix memory leak'* 37 | * Commits must describe the change, especially reverts. Commits without proper messages are meaningless, showing that you have no actual idea what you’re doing. Reverts without a message doesn’t let others know what problem it was causing and it is generally bad for community 38 | * Rebasing and force-pushing is allowed as long as it doesn’t affect other users badly, e.g. don’t force-push main branch of a common dt repository until consulted with all maintainers using it 39 | * When force-pushing a branch it is advised to create a copy of it just in case, named *'mybranch-old'* or *'mybranch-today's date'* 40 | 41 | --- 42 | ### Builds quality requirements 43 | 44 | #### Hardware: 45 | * **Audio** 46 | * All audio outputs that are available in stock rom must be operational 47 | * **RIL** 48 | * Must be operational if it is available in stock rom, it must not crash in any case 49 | * Devices should support call recording 50 | * **Camera** 51 | * Default’s system app - Aperture must be working, however can be overridden. Prebuilt camera apps extracted from stock (like *AnxCamera*) can be included only if it is fully functional and doesn’t crash randomly 52 | * **USB** 53 | * All usb features such as MTP, PTP, ADB, tethering must be working 54 | * **Bluetooth** 55 | * Must be fully operational 56 | * Maintainers can switch to A2DP stack if their hardware supports it 57 | * **Wifi** 58 | * 5GHz must be working if it’s available in stock rom 59 | * Wifi hotspot must be working and should support 5GHz 60 | * **Fingerprint Sensor** 61 | * Must be operational if included 62 | * **Sensors** 63 | * All basic sensors must be working 64 | * **GPS** 65 | * Must be operational and support same range of satellite types as stock 66 | * **Storage** 67 | * Every storage memory must be working, internal and external (like sd cards) 68 | * Devices must support encryption. FDE devices should switch to FBE, FBE encryption must be enabled by default 69 | * Devices should be able to use latest encryption method following Google recommendations, metadata partition should be used when available 70 | 71 | #### Kernel: 72 | * Builtin kernel must not modify default hardware configuration, which is altering cpu/gpu/mem/etc frequency/voltage because of stability reasons 73 | * Must be built with stack protector strong 74 | * Must be built with selinux and seccomp enabled, audit can be disabled 75 | * Kernels can implement blockers for system tweaks like *L Speed*, *LKT* etc, however, must not implement blockers for any of user apps, like *PUBG* 76 | * You must not use any commit that masks disabled selinux or any other security-related feature; cmdline patches for passing Safetynet are allowed (however deprecated in 12.0 and up) 77 | 78 | #### Vendor 79 | Maintainers are free to use stock-extracted blobs, blobs from other devices or leaked BSPs. However, maintainers must test them after any alteration and make sure new blobs are fully operational. They must check logcat and dmesg for any unusual output (like dlsym errors). 80 | 81 | #### Software: 82 | * Only production builds can be shipped (user/userdebug) 83 | * Official builds can be released as weekly, monthly or nightlies when needed but at least they must be released on every crDroid minor version update 84 | * Selinux can be permissive during initial bringup days, only in beta builds. It must be enforced in every official release after non-dt related source is deemed stable 85 | * Sepolicy must meet security standards, it must cover every system and vendor component (no random denials), however it must not contain any rules for 3rd party apps 86 | * Neverallows MUST NOT be masked using *SELINUX_IGNORE_NEVERALLOWS* 87 | * Maintainers must not disable any permissions related checks, particularly alter *ro.control_privapp_permissions* 88 | * Official builds must not be released with gapps unless it is impossible to flash them without bootloop 89 | * If releasing with gapps, the very basic package must be included; any additional packages that are not necessary for basic functionality are not allowed 90 | * Official builds must not contain any additional apps included by the maintainer, except from apps extracted from stock rom and *GCam* 91 | 92 | --- 93 | ### Version history: 94 | * **1.0** - First release 95 | * **1.1** - Reviewed and adapted some rules 96 | * **1.2** - Further clarifications 97 | * **1.3** - Security hardening, clarify sources maintaining, drop our gapps 98 | * **1.4** - Clearning vendor inclusion and more clarification 99 | * **1.5** - Define rule for vendorsetup.sh clone 100 | * **1.6** - Add install instructions 101 | --------------------------------------------------------------------------------