Hacker News

Coccinelle: ເຄື່ອງ​ມື​ການ​ຫັນ​ປ່ຽນ​ແຫຼ່ງ​ໄປ​ຫາ​ແຫຼ່ງ​ຂອງ Linux kernel

ຄຳເຫັນ

1 min read Via github.com

Mewayz Team

Editorial Team

Hacker News

Coccinelle: ເຄື່ອງ​ມື​ການ​ຫັນ​ປ່ຽນ Source-to-Source ຂອງ Linux Kernel

Coccinelle ແມ່ນເຄື່ອງມືການຫັນປ່ຽນຈາກແຫຼ່ງໄປຫາແຫຼ່ງທີ່ມີປະສິດທິພາບທີ່ຖືກອອກແບບມາເພື່ອເຮັດການປ່ຽນແປງຂະຫນາດໃຫຍ່ໂດຍອັດຕະໂນມັດໃນທົ່ວ Linux kernel codebase. ມັນໃຊ້ພາສາສະເພາະໂດເມນທີ່ເອີ້ນວ່າ SmPL (Semantic Patch Language) ເພື່ອສະແດງຮູບແບບລະຫັດ ແລະການປ່ຽນແປງ, ເຮັດໃຫ້ຜູ້ພັດທະນາສາມາດຊອກຫາ ແລະແກ້ໄຂຂໍ້ບົກຜ່ອງ, ອັບເດດ API ທີ່ບໍ່ຮອງຮັບ ແລະແກ້ໄຂລະຫັດ C ຫຼາຍລ້ານເສັ້ນດ້ວຍຄວາມແມ່ນຍໍາໃນການຜ່າຕັດ.

Coccinelle ແມ່ນຫຍັງ ແລະເປັນຫຍັງ Linux Kernel ຕ້ອງການມັນ?

Linux kernel ແມ່ນໜຶ່ງໃນບັນດາໂຄງການຊອບແວທີ່ຮ່ວມມືກັນທີ່ໃຫຍ່ທີ່ສຸດໃນປະຫວັດສາດ, ມີລະຫັດຫຼາຍກວ່າ 30 ລ້ານເສັ້ນທີ່ປະກອບສ່ວນໂດຍນັກພັດທະນາຫຼາຍພັນຄົນ. ເມື່ອ API ພາຍໃນມີການປ່ຽນແປງຫຼືຮູບແບບຂໍ້ຜິດພາດທີ່ເກີດຂື້ນເລື້ອຍໆ, ການປັບປຸງດ້ວຍຕົນເອງທຸກໄຟລ໌ທີ່ໄດ້ຮັບຜົນກະທົບແມ່ນບໍ່ພຽງແຕ່ຫນ້າເບື່ອ - ມັນເປັນໄປບໍ່ໄດ້ທີ່ຈະປະຕິບັດໂດຍບໍ່ມີການແນະນໍາຂໍ້ຜິດພາດໃຫມ່. ອັນນີ້ຄືບັນຫາທີ່ Coccinelle ສ້າງຂຶ້ນເພື່ອແກ້ໄຂ.

ຖືກພັດທະນາໂດຍນັກຄົ້ນຄວ້າຢູ່ Inria ແລະມະຫາວິທະຍາໄລ Copenhagen, Coccinelle ອະນຸຍາດໃຫ້ຜູ້ຮັກສາແກ່ນສາມາດຂຽນ patches semantic — ກົດລະບຽບສັ້ນໆທີ່ອະທິບາຍທັງຮູບແບບລະຫັດໃຫ້ກົງກັນ ແລະການປ່ຽນແປງເພື່ອນຳໃຊ້. ບໍ່ເຫມືອນກັບການຄົ້ນຫາຂໍ້ຄວາມທໍາມະດາ - ແລະແທນທີ່ຫຼືການສະແດງອອກປົກກະຕິ, Coccinelle ເຂົ້າໃຈ C syntax ແລະ semantics. ມັນສາມາດຈັບຄູ່ລະຫັດໂດຍບໍ່ຄໍານຶງເຖິງຊ່ອງຫວ່າງ, ການຕັ້ງຊື່ຕົວແປ, ຫຼືຄວາມແຕກຕ່າງຂອງໂຄງສ້າງເລັກນ້ອຍ, ເຮັດໃຫ້ມັນມີຄວາມຫນ້າເຊື່ອຖືຫຼາຍສໍາລັບການ refactoring ອັດຕະໂນມັດຂະຫນາດໃຫຍ່.

ນັບຕັ້ງແຕ່ການນໍາສະເໜີ, Coccinelle ໄດ້ຮັບຜິດຊອບຕໍ່ຄໍາໝັ້ນສັນຍາຫຼາຍພັນຄັ້ງໃນ Linux kernel, ແລະການລວມເຂົ້າກັບຂະບວນການພັດທະນາຂອງ kernel ໄດ້ເຮັດໃຫ້ມັນເປັນສ່ວນໜຶ່ງທີ່ຂາດບໍ່ໄດ້ຂອງລະບົບນິເວດ.

SmPL (Semantic Patch Language) ເຮັດວຽກແນວໃດ?

ຈຸດໃຈກາງຂອງ Coccinelle ແມ່ນ SmPL, ເປັນເຄື່ອງໝາຍທີ່ຄ້າຍຄືກັບ patch ທີ່ຊ່ວຍໃຫ້ຜູ້ພັດທະນາສະແດງການຫັນປ່ຽນໃນແບບທີ່ຮູ້ສຶກຄຸ້ນເຄີຍ. patch semantic ມີລັກສະນະຄ້າຍຄືກັນກັບຄວາມແຕກຕ່າງທີ່ປະສົມປະສານ, ການນໍາໃຊ້ - ເພື່ອຫມາຍລະຫັດທີ່ຄວນຈະຖືກໂຍກຍ້າຍອອກແລະ + ເພື່ອຊີ້ບອກສິ່ງທີ່ຄວນທົດແທນມັນ. ແນວໃດກໍ່ຕາມ, SmPL ເຮັດວຽກຢູ່ໃນລະດັບຕົ້ນໄມ້ syntax abstract ແທນທີ່ຈະຢູ່ໃນຂໍ້ຄວາມດິບ.

ຕົວຢ່າງ, ຖ້າ kernel ປະຕິເສດຟັງຊັນເຊັ່ນ kmalloc ຈັບຄູ່ກັບ memset ໃນເງື່ອນໄຂຂອງ kzalloc, ນັກພັດທະນາສາມາດຂຽນກົດລະບຽບ SmPL ສັ້ນໆທີ່ກົງກັບທຸກໆຕົວຢ່າງຂອງຮູບແບບເກົ່າໃນທົ່ວ codebase ທັງຫມົດແລະແທນທີ່ມັນໂດຍອັດຕະໂນມັດ. ກົດ​ລະ​ບຽບ​ບັນ​ຊີ​ສໍາ​ລັບ​ການ​ປ່ຽນ​ແປງ​ໃນ​ລໍາ​ດັບ​ການ​ໂຕ້​ຖຽງ, ປະ​ເພດ​ຕົວ​ຊີ້, ແລະ​ສະ​ພາບ​ອ້ອມ​ຂ້າງ — ບາງ​ສິ່ງ​ບາງ​ຢ່າງ​ທີ່​ບໍ່​ມີ​ການ​ສະ​ແດງ​ອອກ​ເປັນ​ປົກ​ກະ​ຕິ​ສາ​ມາດ​ຈັດ​ການ​ຄວາມ​ເຊື່ອ​ຖື​ໄດ້.

"Coccinelle ບໍ່ພຽງແຕ່ຊອກຫາຂໍ້ຄວາມທີ່ກົງກັນເທົ່ານັ້ນ — ມັນເຂົ້າໃຈໂຄງສ້າງຂອງລະຫັດ. ການຮັບຮູ້ແບບ semantic ນີ້ແມ່ນສິ່ງທີ່ເຮັດໃຫ້ມັນສາມາດປະຕິບັດການຫັນປ່ຽນໃນທົ່ວຫຼາຍລ້ານເສັ້ນຂອງລະຫັດໂດຍບໍ່ມີການແນະນໍາ regressions, feat ທີ່ແຍກມັນອອກຈາກທຸກເຄື່ອງມືຄົ້ນຫາແລະທົດແທນທົ່ວໄປ."

SmPL ຍັງຮອງຮັບ metavariables, ເຊິ່ງເຮັດໜ້າທີ່ເປັນ wildcards ທີ່ສາມາດກົງກັບ expression, identifier ຫຼື type ໃດກໍໄດ້. ອັນນີ້ເຮັດໃຫ້ກົດລະບຽບສາມາດນຳໃຊ້ຄືນໄດ້ສູງ ແລະສາມາດປັບຕົວເຂົ້າກັບຮູບແບບທີ່ປາກົດຢູ່ໃນຮູບແບບທີ່ແຕກຕ່າງກັນເລັກນ້ອຍໃນທົ່ວ codebase.

💡 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 →

ກໍລະນີທີ່ໃຊ້ທົ່ວໄປທີ່ສຸດສຳລັບ Coccinelle ແມ່ນຫຍັງ?

ຄວາມພ້ອມຂອງ Coccinelle ຂະຫຍາຍອອກໄປນອກເໜືອໄປກວ່າການຍ້າຍ API ງ່າຍໆ. ຜູ້ພັດທະນາ ແລະຜູ້ຮັກສາ Kernel ອີງໃສ່ມັນສໍາລັບວຽກງານທີ່ຫຼາກຫຼາຍ ຖ້າບໍ່ດັ່ງນັ້ນຈະໃຊ້ເວລາ ແລະຄວາມສົນໃຈເປັນຈໍານວນຫຼວງຫຼາຍ.

  • ວິວັດທະນາການ API: ເມື່ອການປ່ຽນລາຍເຊັນຂອງຟັງຊັນ ຫຼື wrappers ໄດ້ຖືກນໍາສະເຫນີ, Coccinelle ສາມາດອັບເດດທຸກເວັບໄຊທ໌ການໂທໂດຍອັດຕະໂນມັດ, ຮັບປະກັນຄວາມສອດຄ່ອງໃນທົ່ວລະບົບຍ່ອຍ.
  • ການກວດຫາຂໍ້ຜິດພາດ: ກົດລະບຽບ SmPL ສາມາດລະບຸຮູບແບບຂໍ້ຜິດພາດທີ່ເກີດຂຶ້ນຊ້ຳໆ ເຊັ່ນ: ການກວດສອບ null ທີ່ຂາດຫາຍໄປ, ການຈັດການຄວາມຜິດພາດທີ່ບໍ່ຖືກຕ້ອງ, ເງື່ອນໄຂການນໍາໃຊ້ພາຍຫຼັງທີ່ບໍ່ມີການຮົ່ວໄຫຼ, ແລະການຮົ່ວໄຫຼຂອງຊັບພະຍາກອນ.
  • ການປັບລະຫັດໃຫ້ທັນສະໄໝ: ໃນຂະນະທີ່ມາດຕະຖານການເຂົ້າລະຫັດພັດທະນາຂຶ້ນ, Coccinelle ຊ່ວຍຍ້າຍຮູບແບບເກົ່າແກ່ໄປສູ່ການທຽບເທົ່າທີ່ທັນສະໄຫມ — ຕົວຢ່າງ, ການປ່ຽນແຖບມ້ວນດ້ວຍມືດ້ວຍມາໂຄຣມາດຕະຖານ.
  • ວິວັດທະນາການຄໍ້າປະກັນ: ເມື່ອຫ້ອງສະໝຸດ ຫຼືສ່ວນຕິດຕໍ່ຜູ້ຂັບຂີ່ປ່ຽນແປງ, ລະຫັດທີ່ຂຶ້ນກັບທັງໝົດຈະຕ້ອງປັບຕົວເຂົ້າກັນ. Coccinelle ຈັດການ "ວິວັດທະນາການຫຼັກປະກັນ" ເຫຼົ່ານີ້ໂດຍການເຜີຍແຜ່ການປ່ຽນແປງໃຫ້ກັບຜູ້ບໍລິໂພກໃນທຸກໆດ້ານ.
  • ການບັງຄັບໃຊ້ຮູບແບບ: ນອກເຫນືອຈາກການປ່ຽນແປງທີ່ເປັນປະໂຫຍດ, Coccinelle ສາມາດບັງຄັບໃຊ້ສົນທິສັນຍາການຂຽນລະຫັດທີ່ສອດຄ່ອງ, ຫຼຸດຜ່ອນສຽງລົບກວນໃນການກວດສອບລະຫັດແລະປັບປຸງການອ່ານໂດຍລວມ.

Linux kernel source tree ແມ້ແຕ່ສົ່ງໄດເລກະທໍລີ scripts/coccinelle/ ທີ່ອຸທິດຕົນທີ່ປະກອບດ້ວຍກົດລະບຽບ SmPL ທີ່ກຽມພ້ອມທີ່ຜູ້ພັດທະນາສາມາດດໍາເນີນການກວດສອບ patches ຂອງເຂົາເຈົ້າກ່ອນທີ່ຈະສົ່ງ.

Coccinelle ສາມາດໃຊ້ນອກ Linux Kernel ໄດ້ບໍ?

ໃນຂະນະທີ່ Coccinelle ເກີດມາຈາກການພັດທະນາ Linux kernel, ມັນບໍ່ໄດ້ຈໍາກັດມັນ. ທຸກ codebase C — embedded systems firmware, user-space applications, operating system components — ສາ​ມາດ​ໄດ້​ຮັບ​ຜົນ​ປະ​ໂຫຍດ​ຈາກ​ຄວາມ​ສາ​ມາດ​ການ​ຫັນ​ປ່ຽນ Coccinelle. ໂຄງການເຊັ່ນ Wine, OpenSSL, ແລະການແຈກຢາຍ BSD ຕ່າງໆໄດ້ຮັບຮອງເອົາມັນສໍາລັບຂັ້ນຕອນການບໍາລຸງຮັກສາຂອງເຂົາເຈົ້າເອງ.

ເຄື່ອງ​ມື​ຍັງ​ເປັນ​ພື້ນ​ຖານ​ສໍາ​ລັບ​ການ​ຄົ້ນ​ຄ​້​ວາ​ທາງ​ວິ​ຊາ​ການ​ໃນ​ວິ​ວັດ​ການ​ຊອບ​ແວ​, ການ​ສ້ອມ​ແປງ​ໂຄງ​ການ​ອັດ​ຕະ​ໂນ​ມັດ​, ແລະ​ການ​ວິ​ເຄາະ​ສະ​ຖິ​ຕິ​. ຄວາມສາມາດໃນການສະແດງລະຫັດທີ່ຊັບຊ້ອນໃນຮູບແບບທີ່ສາມາດອ່ານໄດ້, ປະກາດໄດ້ເຮັດໃຫ້ມັນເປັນເຄື່ອງມືການສອນທີ່ດີເລີດສໍາລັບການເຂົ້າໃຈວິທີການພັດທະນາລະບົບຊອບແວຂະຫນາດໃຫຍ່ຕາມເວລາ.

ສຳ​ລັບ​ທີມ​ທີ່​ຈັດ​ການ​ຖານ​ລະ​ຫັດ C ແບບ​ເກົ່າ, Coccinelle ສາ​ມາດ​ຫຼຸດ​ຜ່ອນ​ຄ່າ​ໃຊ້​ຈ່າຍ ແລະ​ຄວາມ​ສ່ຽງ​ຕໍ່​ຄວາມ​ພະ​ຍາ​ຍາມ​ເຮັດ​ໃຫ້​ທັນ​ສະ​ໄໝ​ໄດ້​ຢ່າງ​ຫຼວງ​ຫຼາຍ. ແທນທີ່ຈະມອບໝາຍໃຫ້ວິສະວະກອນໃຫ້ກວດສອບ ແລະອັບເດດໄຟລ໌ຫຼາຍພັນໄຟລ໌ດ້ວຍຕົນເອງ, ໂປຣແກຣມແກ້ໄຂຄວາມໝາຍທີ່ສ້າງມາດີອັນດຽວສາມາດເຮັດວຽກດຽວກັນໄດ້ພາຍໃນນາທີດ້ວຍຄວາມຖືກຕ້ອງຫຼາຍກວ່າເກົ່າ.

ຄຳຖາມທີ່ຖາມເລື້ອຍໆ

ແມ່ນ Coccinelle ພຽງແຕ່ເປັນປະໂຫຍດສໍາລັບການຂຽນໂປລແກລມ C ບໍ?

Coccinelle ໄດ້ຖືກອອກແບບໂດຍສະເພາະສໍາລັບ C ແລະເຮັດວຽກທີ່ດີທີ່ສຸດກັບ C codebases. ໄດ້ມີການຂະຫຍາຍການທົດລອງ ແລະໂຄງການຄົ້ນຄວ້າທີ່ຄົ້ນຫາການຮອງຮັບພາສາອື່ນ, ແຕ່ເຄື່ອງມືທີ່ກຽມພ້ອມໃນການຜະລິດແມ່ນເນັ້ນໃສ່ C. ສໍາລັບທີມງານທີ່ເຮັດວຽກກັບລະບົບ C-based — ຈາກອຸປະກອນຝັງຕົວໄປເຖິງລະບົບປະຕິບັດການ — ມັນຍັງຄົງເປັນເຄື່ອງມືການຫັນປ່ຽນອັດຕະໂນມັດທີ່ມີປະສິດທິພາບທີ່ສຸດທີ່ມີຢູ່.

Coccinelle ປຽບທຽບກັບເຄື່ອງມືເຊັ່ນ: sed, awk, ຫຼື codemod ແນວໃດ?

ເຄື່ອງ​ມື​ປະ​ມວນ​ຜົນ​ຕົວ​ໜັງ​ສື​ແບບ​ດັ້ງ​ເດີມ​ເຮັດ​ວຽກ​ຢູ່​ໃນ​ສະ​ຕ​ຣິງ​ໂດຍ​ບໍ່​ມີ​ຄວາມ​ເຂົ້າ​ໃຈ​ໂຄງ​ສ້າງ​ລະ​ຫັດ. ພວກເຂົາບໍ່ສາມາດຈໍາແນກລະຫວ່າງຊື່ຕົວແປແລະຄໍາຄິດຄໍາເຫັນທີ່ມີຂໍ້ຄວາມດຽວກັນ, ແລະພວກເຂົາບໍ່ສາມາດຄິດໄລ່ການປ່ຽນແປງ syntactic ໃນວິທີການສະແດງເຫດຜົນດຽວກັນ. Coccinelle parses ລະຫັດ C ຕົວຈິງແລະເຮັດວຽກຢູ່ໃນຕົ້ນໄມ້ syntax abstract ຂອງມັນ, ຊຶ່ງຫມາຍຄວາມວ່າມັນສະຫນອງຜົນບວກທີ່ບໍ່ຖືກຕ້ອງຫນ້ອຍລົງແລະບໍ່ເຄີຍສ້າງຜົນຜະລິດທີ່ແຕກຫັກ syntactically ຈາກກົດລະບຽບການຂຽນທີ່ຖືກຕ້ອງ.

ຜູ້ເລີ່ມຕົ້ນສາມາດຮຽນຮູ້ການໃຊ້ Coccinelle ໄດ້ຢ່າງມີປະສິດທິພາບບໍ?

ແມ່ນແລ້ວ, ເຖິງແມ່ນວ່າມີເສັ້ນໂຄ້ງການຮຽນຮູ້. ພາສາ SmPL ຖືກອອກແບບໂດຍເຈດຕະນາໃຫ້ຄ້າຍຄືກັບຄວາມແຕກຕ່າງທີ່ເປັນເອກະພາບ, ເຊິ່ງຜູ້ພັດທະນາສ່ວນໃຫຍ່ຮູ້ວິທີການອ່ານແລ້ວ. ເອກະສານ Coccinelle ສະຫນອງຕົວຢ່າງຈໍານວນຫລາຍຕັ້ງແຕ່ການຫັນປ່ຽນແບບງ່າຍດາຍໄປຫາສະຄິບຫຼາຍກົດລະບຽບທີ່ສັບສົນ. ຜູ້ມາໃໝ່ຫຼາຍຄົນເລີ່ມຕົ້ນໂດຍການສຶກສາກົດລະບຽບທີ່ມີຢູ່ແລ້ວໃນໄດເລກະທໍລີ scripts/coccinelle/ ຂອງ Linux kernel ແລະດັດແປງໃຫ້ເຂົາເຈົ້າສໍາລັບຄວາມຕ້ອງການຂອງຕົນເອງ.

ປັບປຸງການດຳເນີນທຸລະກິດຂອງທ່ານເອງ

ຄືກັນກັບ Coccinelle ອັດຕະໂນມັດການຫັນປ່ຽນທີ່ຊັບຊ້ອນໃນທົ່ວ codebases ຂະຫນາດໃຫຍ່, ແພລະຕະຟອມທຸລະກິດທີ່ເຫມາະສົມຈະອັດຕະໂນມັດຂະບວນການເຮັດວຽກທີ່ສັບສົນໃນທົ່ວອົງການຂອງທ່ານ. Mewayz ເອົາ 207 ໂມດູນປະສົມປະສານ - ຈາກການຄຸ້ມຄອງໂຄງການແລະ CRM ໄປຫາໃບແຈ້ງຫນີ້ແລະ HR - ເຂົ້າໄປໃນລະບົບປະຕິບັດການດຽວສໍາລັບທຸລະກິດຂອງທ່ານ. ແທນ​ທີ່​ຈະ​ຕິດ​ຕໍ່​ກັນ​ຫຼາຍ​ສິບ​ເຄື່ອງ​ມື​ທີ່​ຖືກ​ຕັດ​ເຊື່ອມ​ຕໍ່​ກັນ, ທ່ານ​ໄດ້​ຮັບ​ຫນຶ່ງ​ເປັນ​ເວ​ທີ​ທີ່​ເປັນ​ເອ​ກະ​ພາບ​ທີ່​ເຊື່ອ​ຖື​ໄດ້​ໂດຍ​ຫຼາຍ​ກວ່າ 138,000 ຜູ້​ຊົມ​ໃຊ້. ແຜນການເລີ່ມຕົ້ນພຽງແຕ່ $19/ເດືອນ. ເລີ່ມການທົດລອງໃຊ້ຟຣີຂອງທ່ານທີ່ app.mewayz.com ແລະປະສົບການວ່າມັນຫມາຍຄວາມວ່າແນວໃດໃນການດໍາເນີນທຸລະກິດຂອງທ່ານໃນ autopilot.

.

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

Start managing your business smarter today

Join 30,000+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.

Start Free Trial →

Ready to take action?

Start your free Mewayz trial today

All-in-one business platform. No credit card required.

Start Free →

14-day free trial · No credit card · Cancel anytime