Hacker News

Coccinelle: Linux kernel no fibea-kɔ-fibea nsakrae adwinnade

Nsɛm a wɔka

10 min read Via github.com

Mewayz Team

Editorial Team

Hacker News

Coccinelle: Linux Kernel no Fibea-kɔ-Fibea Nsakrae Adwinnade

Coccinelle yɛ fibea-kɔ-fibea nsakrae adwinnade a tumi wom a mfiase no wɔyɛɛ no sɛ ɛbɛma nsakrae akɛse ayɛ adwuma wɔ Linux kernel codebase no nyinaa so. Ɛde kasa bi a ɛfa domain pɔtee bi ho a wɔfrɛ no SmPL (Semantic Patch Language) di dwuma de da koodu nhyehyɛe ne nsakrae adi, na ɛma wɔn a wɔyɛ no tumi hwehwɛ na wosiesie mfomso ahorow, wɔyɛ API ahorow a wɔagyae no foforo, na wɔsan yɛ C koodu nkyerɛwde ɔpepem pii a ɛyɛ oprehyɛn pɛpɛɛpɛ.

Dɛn Ne Coccinelle na Dɛn Nti na Linux Kernel Hia No?

Linux kernel yɛ software adwuma akɛseɛ a wɔbom yɛ wɔ abakɔsɛm mu no mu baako, a ɛwɔ code bɛboro ɔpepem 30 a developers mpempem pii de maeɛ. Sɛ API a ɛwɔ mu sesa anaasɛ wohu mfomsoɔ nhwɛsoɔ a ɛsan ba a, fael biara a ɛka no a wɔde nsa bɛsesa no nyɛ ɔbrɛ kɛkɛ — ɛkame ayɛ sɛ ɛrentumi nyɛ yie a wɔmfa mfomsoɔ foforɔ mmra. Eyi ne ɔhaw a wɔkyekyeree Coccinelle sɛ onni ho dwuma no pɛpɛɛpɛ.

Nhwehwɛmufoɔ a wɔwɔ Inria ne Copenhagen Suapɔn mu na wɔyɛɛ no, Coccinelle ma wɔn a wɔhwɛ kernel so no kwan ma wɔkyerɛw semantic patches — mmara tiawa a ɛkyerɛkyerɛ code pattern a ɛne ne ho hyia ne nsakraeɛ a wɔde bedi dwuma nyinaa mu. Nea ɛnte sɛ nkyerɛwee a ɛnyɛ den a wɔhwehwɛ na wɔde si ananmu anaa nsɛmfua a wɔde di dwuma daa no, Coccinelle te C kasamufa ne nkyerɛase ase. Ebetumi ne koodu ahyia a whitespace, variable din, anaa structure nsonsonoe nketenkete mfa ho, na ɛma ɛyɛ nea wotumi de ho to so kɛse ma automated refactoring akɛse.

Efi bere a wɔde bae no, Coccinelle na ɛhwɛ commit mpempem pii so wɔ Linux kernel no mu, na ne nkabom wɔ kernel no nkɔso adwumayɛ mu no ama ayɛ ecosystem no fã a ɛho nhia.

SmPL (Semantic Patch Language) Yɛ Adwuma Dɛn?

Wɔ Coccinelle koma mu ne SmPL, nkyerɛwde a ɛte sɛ patch a ɛma wɔn a wɔyɛ no da nsakrae adi wɔ ɔkwan a ɛte sɛ nea wonim so. Semantic patch te sɛ diff a wɔaka abom, de - di dwuma de hyɛ koodu a ɛsɛ sɛ woyi fi hɔ agyirae ne + de kyerɛ nea ɛsɛ sɛ wɔde si ananmu. Nanso, SmPL yɛ adwuma wɔ abstract syntax dua level so sen sɛ ɛbɛyɛ adwuma wɔ raw text so.

Sɛ nhwɛsoɔ no, sɛ kernel no pow dwumadie te sɛ kmalloc a wɔde abɔ mu ne memset de gyina kzalloc akyi a, developer bi bɛtumi akyerɛw SmPL mmara tiawa bi a ɛne nhwɛsoɔ dedaw no nhwɛsoɔ biara hyia wɔ codebase no nyinaa so na ɛde si ananmu ankasa. Mmara no bu nsakraeɛ a ɛwɔ akyinnyegyeɛ nhyehyɛeɛ, pointer ahodoɔ, ne nsɛm a atwa ho ahyia mu — biribi a daa asɛmfua biara ntumi nni ho dwuma wɔ ahotosoɔ mu.

a wɔde ahyɛ mu

"Coccinelle nhunu nsɛm a ɛne ne ho hyia nko ara — ɔte koodu nhyehyɛɛ ase. Saa nkyerɛaseɛ ho nimdeɛ yi ne deɛ ɛma ɛtumi yɛ nsakraeɛ wɔ koodu nkyerɛwdeɛ ɔpepem pii mu a ɛmfa regressions mmra, adeyɛ a ɛtetew no firi adwinnadeɛ biara a ɛyɛ generic find-and-replace ho."

na ɛkyerɛ sɛ woayɛ

SmPL nso boa metavariables, a ɛyɛ adwuma sɛ wildcards a ebetumi ne nkyerɛkyerɛmu, nkyerɛkyerɛmu, anaa ɔkwan biara ahyia. Wei ma mmara tumi san de di dwuma kɛse na ɛtumi sesa ma ɛne nhwɛsoɔ a ɛda adi wɔ akwan soronko kakra so wɔ codebase no nyinaa mu.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

Dɛn ne Nneɛma a Ɛtaa De Coccinelle Di Dwuma?

Coccinelle tumi a ɔde yɛ nneɛma pii no trɛw kɔ akyiri sen API a wotu kɔ baabi foforo a ɛnyɛ den. Kernel developers ne maintainers de wɔn ho to so ma nnwuma ahodoɔ pii a anka ɛbɛgye berɛ ne adwene kɛseɛ.

  • API nkɔsoɔ: Sɛ dwumadie nsaano nkyerɛwee sesa anaa wɔde wrappers ba a, Coccinelle bɛtumi ayɛ frɛ sait biara foforɔ ankasa, ahwɛ sɛ ɛyɛ pɛpɛɛpɛ wɔ subsystems nyinaa mu.
  • Mfomsoɔ a wɔhunu: SmPL mmara tumi kyerɛ mfomsoɔ nhwɛsoɔ a ɛsan ba te sɛ null nhwehwɛmu a ɛyera, mfomsoɔ a wɔdi ho dwuma a ɛntene, tebea a wɔde di dwuma akyi a wɔmfa hwee nto mu, ne nneɛma a ɛtwetwe.
  • Code modernization: Bere a coding gyinapɛn ahorow renya nkɔso no, Coccinelle boa ma wotu agyapade nhwɛso ahorow kɔ nnɛyi nea ɛne no sɛ — sɛ nhwɛso no, wɔde macros a wɔahyɛ da ayɛ no si loops a wɔde nsa abɔ ananmu.
  • Collateral evolutions: Sɛ nhomakorabea anaa draiver interface sesa a, ɛsɛ sɛ code a egyina so nyinaa sesa. Coccinelle di saa "collateral evolutions" yi ho dwuma denam nsakrae a ɔtrɛw kɔ obiara a ɔde di dwuma wɔ nsu ase no so.
  • Style enforcement: Wɔ dwumadie mu nsakraeɛ akyi no, Coccinelle tumi hyɛ coding nhyiamu a ɛkɔ so daa, ɛtew dede so wɔ code nhwehwɛmu mu na ɛma akenkan nyinaa tu mpɔn.

Linux kernel source dua no mpo de scripts/coccinelle/ directory a wɔatu ho ama a SmPL mmara a wɔasiesie a developers betumi ayɛ de ahwɛ wɔn patches ansa na wɔde amena.

So Wobetumi De Coccinelle Di Dwuma Wɔ Linux Kernel no Akyi?

Bere a wɔwoo Coccinelle fii Linux kernel nkɔso mu no, ɛnyɛ ɛno nkutoo mu ɔkwan biara so. C codebase biara — embedded systems firmware, user-space applications, operating system components — betumi anya mfaso afi Coccinelle nsakrae tumi mu. Nnwuma te sɛ Wine, OpenSSL, ne BSD nkyekyɛmu ahodoɔ agye atom ama wɔn ankasa nsiesie adwumayɛ.

Adwinnade no nso yɛ fapem ma adesua mu nhwehwɛmu wɔ softwea nkɔso, nhyehyɛe a wɔde siesie nhyehyɛe a wɔde wɔn ankasa yɛ, ne nhwehwɛmu a ɛnyɛ adwuma. Ne tumi a ɛde da koodu nhyehyɛe a ɛyɛ den adi wɔ ɔkwan a wotumi kenkan, a ɛyɛ mpaemuka mu no ma ɛyɛ nkyerɛkyerɛ adwinnade a eye kyɛn so a wɔde te sɛnea softwea nhyehyɛe akɛse dannan bere kɔ so no ase.

Wɔ akuo a wɔhwɛ agyapadeɛ C codebases so no, Coccinelle betumi atew ɛka ne asiane a ɛwɔ nnɛyi mmɔdenbɔ mu no so kɛse. Sɛ anka wɔde mfiridwumayɛfoɔ bɛma sɛ wɔmfa nsa nhwɛ fael mpempem pii mu na wɔnyɛ no foforɔ no, semantic patch baako a wɔayɛ no yie bɛtumi ayɛ adwuma korɔ no ara wɔ simma kakraa bi mu a ɛyɛ pɛpɛɛpɛ kɛseɛ koraa.

Nsɛmmisa a Wɔtaa Bisa

So Coccinelle ho wɔ mfaso ma C nhyehyɛe nkutoo?

Wɔyɛɛ Coccinelle titiriw maa C na ɛyɛ adwuma yiye wɔ C codebases mu. Wɔayɛ nhwehwɛmu ntrɛwmu ne nhwehwɛmu adwuma a ɛhwehwɛ mmoa a wɔde ma kasa afoforo, nanso adwinnade a ɛyɛ krado sɛ wɔbɛyɛ no twe adwene si C. Wɔ akuw a wɔde nhyehyɛe a egyina C so yɛ adwuma — efi mfiri a wɔde ahyɛ mu so kosi nhyehyɛe a wɔde di dwuma so — ɛda so ara yɛ nsakrae adwinnade a etu mpɔn sen biara a ɛwɔ hɔ.

Ɔkwan bɛn so na Coccinelle de toto nnwinnadeɛ te sɛ sed, awk, anaa codemod ho?

Atetesɛm nkyerɛwee-dwumadi nnwinnade yɛ adwuma wɔ nhama so a ɛnte koodu nhyehyɛe ase. Wontumi nkyerɛ nsonsonoe a ɛda din a ɛsakra ne nsɛm a wɔka a nsɛm koro wom ntam, na saa ara nso na wontumi mmu nsonsonoe a ɛwɔ kasamufa mu wɔ sɛnea wɔda ntease koro no ara adi no ho akontaa. Coccinelle parses C code ankasa na ɛyɛ adwuma wɔ ne abstract syntax dua no so, a ɛkyerɛ sɛ ɛde atoro positives kakraa bi koraa ma na ɛmma syntactically broken output mfi mmara a wɔakyerɛw no yiye mu da.

So wɔn a wɔrefi ase betumi asua sɛnea wɔde Coccinelle bedi dwuma yiye?

Yiw, ɛwom sɛ adesua kwan bi wɔ hɔ de. Wɔahyɛ da ayɛ SmPL kasa no sɛnea ɛbɛyɛ a ɛbɛyɛ te sɛ diffs a wɔaka abom, a wɔn a wɔyɛ no dodow no ara nim akenkan dedaw. Coccinelle nkrataa no de nhwɛsoɔ bebree a ɛfiri nsakraeɛ a ɛnyɛ den so kɔsi mmara ahodoɔ nkyerɛwee a ɛyɛ den so ma. Wɔn a wɔaba foforo bebree fi ase denam mmara a ɛwɔ hɔ dedaw a wosua wɔ Linux kernel no scripts/coccinelle/ directory no mu na wɔsakra no ma wɔn ankasa ahiade.

Ma W'ankasa Adwumayɛ Dwumadie no Nsiesiei

Sɛnea Coccinelle yɛ nsakraeɛ a ɛyɛ den wɔ codebases akɛseɛ so no, adwumayɛ kwan a ɛfata no yɛ adwuma a ɛyɛ den wɔ w’ahyehyɛdeɛ no nyinaa mu. Mewayz de modules 207 a wɔaka abom — efi adwuma no sohwɛ ne CRM so kosi invoicing ne HR so — ba adwumayɛ nhyehyɛe biako mu ma w’adwuma. Sɛ́ anka wobɛpam nnwinnade du du pii a wɔatwa mu no, wubenya platform biako a wɔaka abom a nnipa bɛboro 138,000 a wɔde di dwuma no gye wɔn di. Nhyehyɛe ahorow fi ase fi $19/ɔsram pɛ. Fi ase wo sɔhwɛ a wontua hwee wɔ app.mewayz.com na nya nea ɛkyerɛ sɛ wobɛhwɛ w’adwuma wɔ autopilot so.