John the Ripper 1.9.0-jumbo-1 ืขื ืชืžื™ื›ื” ื‘-FPGA

ืžึฐืฉืื•ึผื—ืจึธืจ ื’ืจืกื” ื—ื“ืฉื” ืฉืœ ืชื•ื›ื ื™ืช ื ื™ื—ื•ืฉ ื”ืกื™ืกืžืื•ืช ื”ื•ื•ืชื™ืงื” ื”ื ืชืžื›ืช John the Ripper 1.9.0-jumbo-1. (ื”ืคืจื•ื™ืงื˜ ืžืชืคืชื— ืžืื– 1996.) ื‘ื™ื•ื ืขืžื•ื“ ื”ืคืจื•ื™ืงื˜ ืžืงื•ืจื•ืช ื–ืžื™ื ื™ื ืœื”ื•ืจื“ื”, ื›ืžื• ื’ื ื”ืจื›ื‘ื•ืช ืžื•ื›ื ื•ืช ืขื‘ื•ืจ Windows.

ื™ืฆื•ื™ืŸ ื›ื™ ื—ืœืคื• 1.8.0 ืฉื ื™ื ืžืื– ื™ืฆื™ืืช ื’ืจืกื” 1-jumbo-4.5, ื‘ืžื”ืœื›ืŸ ื‘ื•ืฆืขื• ื™ื•ืชืจ ืž-6000 ืฉื™ื ื•ื™ื™ื (ื’ื™t commits) ืžื™ื•ืชืจ ืž-80 ืžืคืชื—ื™ื. ื‘ืžื”ืœืš ืชืงื•ืคื” ื–ื• ื”ืžืœื™ืฆื• ื”ืžืคืชื—ื™ื ืœื”ืฉืชืžืฉ ื’ืจืกื” ื ื•ื›ื—ื™ืช ืž-GitHub, ืฉืžืฆื‘ื” ื ืฉืžืจ ื™ืฆื™ื‘ ืœืžืจื•ืช ื”ืฉื™ื ื•ื™ื™ื ืฉื ืขืฉื• ื‘ื–ื›ื•ืช ืื™ื ื˜ื’ืจืฆื™ื” ืžืชืžืฉื›ืช, ื”ื›ื•ืœืœ ืื™ืžื•ืช ืจืืฉื•ื ื™ ืฉืœ ื›ืœ ืฉื™ื ื•ื™ (pull request) ื‘ืคืœื˜ืคื•ืจืžื•ืช ืจื‘ื•ืช. ืชื›ื•ื ื” ืžื™ื•ื—ื“ืช ืฉืœ ื”ื’ืจืกื” ื”ื—ื“ืฉื” ื”ื™ื ื”ื•ืคืขืช ื”ืชืžื™ื›ื” ื‘-FPGA (FPGA) ื‘ื ื•ืกืฃ ืœืžืขื‘ื“, GPU ื•-Xeon Phi.


ืขื‘ื•ืจ ืœื•ื—ื•ืช Ztex 1.15y, ื›ื•ืœืœ 4 ืฉื‘ื‘ื™ FPGA ื•ืžืฉืžืฉื™ื ื‘ืžืงื•ืจ ื‘ืขื™ืงืจ ืœื›ืจื™ื™ืช ื‘ื™ื˜ืงื•ื™ืŸ, ืžื™ื•ืฉืžื™ื ื›ืขืช 7 ืกื•ื’ื™ื ืฉืœ ื’ื™ื‘ื•ื‘ ืกื™ืกืžืื•ืช: bcrypt, classic descrypt (ื›ื•ืœืœ bigcrypt), sha512crypt, sha256crypt, md5crypt (ื›ื•ืœืœ Apache apr1 ื•-AIX smd5), Drupal7 ื•-phpass (ื‘ืฉื™ืžื•ืฉ , ื‘ืžื™ื•ื—ื“ ื‘ื•ื•ืจื“ืคืจืก). ื—ืœืงื ืžื™ื•ืฉืžื™ื ื‘-FPGA ื‘ืคืขื ื”ืจืืฉื•ื ื”. ืขื‘ื•ืจ bcrypt, ื”ื‘ื™ืฆื•ืขื™ื ืฉื”ื•ืฉื’ื• ืฉืœ ~119k c/s ืขื 2^5 ืื™ื˜ืจืฆื™ื•ืช ("$2b$05") ืขื ืฆืจื™ื›ืช ื—ืฉืžืœ ืฉืœ ื›-27 ื•ื•ืื˜ ืขื•ืœื™ื ืžืฉืžืขื•ืชื™ืช ืขืœ ื”ืชื•ืฆืื•ืช ืขื‘ื•ืจ ื”-GPUs ื”ืขื“ื›ื ื™ื™ื ื‘ื™ื•ืชืจ ืœืœื•ื—, ืœืžื—ื™ืจ ื—ื•ืžืจื” ื•ืœื•ื•ืื˜. ื ืชืžืš ื’ื ืืฉื›ื•ืœื•ืช ืฉืœ ืœื•ื—ื•ืช ืžืกื•ื’ ื–ื”, ืฉื ื‘ื“ืงื• ืขื“ 16 ืœื•ื—ื•ืช (64 FPGAs) ื”ื ืฉืœื˜ื™ื ืž-Raspberry Pi 2 ื™ื—ื™ื“. ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื”ืจื’ื™ืœื” ืฉืœ John the Ripper ื ืชืžื›ืช, ื›ื•ืœืœ ื›ืœ ืžืฆื‘ื™ ื ื™ื—ื•ืฉ ื”ืกื™ืกืžื” ื•ื”ื•ืจื“ื” ื‘ื•-ื–ืžื ื™ืช ืฉืœ ืžืกืคืจ ืจื‘ ืฉืœ hashes. ื›ื“ื™ ืœื”ืื™ืฅ ืืช ื”ืขื‘ื•ื“ื”, ื™ื™ืฉืžื ื• ืฉื™ืžื•ืฉ ื‘ืžืกื›ื” (ืžืฆื‘ ื”-"--mask", ื›ื•ืœืœ ื‘ืฉื™ืœื•ื‘ ืขื ืžืฆื‘ื™ื ืื—ืจื™ื) ื•ื”ืฉื•ื•ืื” ืฉืœ ื”ื’ื™ื‘ื•ื‘ื™ื ื”ืžื—ื•ืฉื‘ื™ื ืœืืœื” ืฉื”ื•ืขืžืกื• ื‘ืฆื“ ื”-FPGA. ืžื ืงื•ื“ืช ืžื‘ื˜ ืฉืœ ื™ื™ืฉื•ื, ืจื‘ื™ื ืžื”ืขื™ืฆื•ื‘ื™ื (ืœืžืฉืœ. sha512crypt ื•-Drupal7) ื”ืฉืชืžืฉื• ื‘ืœื•ืงื™ื ื”ืžื•ืจื›ื‘ื™ื ืžืœื™ื‘ื•ืช ืžืขื‘ื“ ืžืจื•ื‘ื•ืช ื”ืœื™ื›ื•ืช (ืœื™ื‘ื•ืช CPU ืจื›ื•ืช) ื”ืžืงื™ื™ืžื•ืช ืื™ื ื˜ืจืืงืฆื™ื” ืขื ืœื™ื‘ื•ืช ืงืจื™ืคื˜ื•ื’ืจืคื™ื•ืช. ืืช ื”ืคื™ืชื•ื— ืฉืœ ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื–ื• ื”ื•ื‘ื™ืœ ื“ื ื™ืก ื‘ื•ืจื™ืงื™ืŸ ื‘ืชื™ืื•ื ืขื ืžืคืชื—ื™ ื’'ืžื‘ื• ืื—ืจื™ื.

ืฉื™ื ื•ื™ื™ื ื’ื“ื•ืœื™ื ื ื•ืกืคื™ื:

  • ืชืžื™ื›ื” ื‘ืžืกืคืจ ืจื‘ ืฉืœ ืกื•ื’ื™ื ื ื•ืกืคื™ื ืฉืœ ื’ื™ื‘ื•ื‘, ืฆืคื ื™ื ื•ื›ื•', ื›ื•ืœืœ ื”ืŸ ื’ื™ื‘ื•ื‘ ืกื™ืกืžืื•ืช ืงืœืืกื™ (ืœื“ื•ื’ืžื”, ืžื’ืจืกืื•ืช ื—ื“ืฉื•ืช ืฉืœ QNX), ื›ืžื• ื’ื ืืจื ืงื™ ืžื˜ื‘ืขื•ืช ืงืจื™ืคื˜ื•ื’ืจืคื™ื™ื, ืืจื›ื™ื•ื ื™ื ืžื•ืฆืคื ื™ื ื•ืžืขืจื›ื•ืช ืงื‘ืฆื™ื ืžื•ืฆืคื ื•ืช (ืœื“ื•ื’ืžื”, Bitlocker ื• FreeBSD geli), ื›ืžื• ื’ื ืชืžื™ื›ื” ื‘ืกื•ื’ื™ื ื—ื“ืฉื™ื ืฉืœ ืคื•ืจืžื˜ื™ื ืฉื ืชืžื›ื• ื‘ืขื‘ืจ (ืœื“ื•ื’ืžื”, ื”ื•ืกืคืช ืชืžื™ื›ื” ื‘-bcrypt-pbkdf ืขื‘ื•ืจ OpenBSD softraid) ื•ืขื•ื“ ื”ืจื‘ื” ื™ื•ืชืจ. ื‘ืกืš ื”ื›ืœ, ื ื•ืกืคื• 80 ืคื•ืจืžื˜ื™ื ื‘-CPU ื•-47 ื‘-OpenCL (ื•ืžืกืคืจ ืงื˜ืŸ ืฉืœ ื™ืฉื ื™ื ื”ื•ืกืจื• ื›ืฉื”ื ืžืฉื•ืœื‘ื™ื ื‘ื—ื“ืฉื™ื ื•ืžื™ื•ืฉื ื™ื). ื”ืžืกืคืจ ื”ื›ื•ืœืœ ืฉืœ ื”ืคื•ืจืžื˜ื™ื ื”ื•ื ื›ืขืช 407 ื‘ืžืขื‘ื“ (ืื• 262 ืœื ื›ื•ืœืœ ืคื•ืจืžื˜ื™ื "ื“ื™ื ืžื™ื™ื" ื”ืžื•ื’ื“ืจื™ื ืžืงื•ื‘ืฆื™ ืชืฆื•ืจื”) ื•-88 ื‘-OpenCL.
  • ื”ืกืจืช ืชืžื™ื›ื” ื‘ืฉืคืช CUDA ืœื˜ื•ื‘ืช OpenCL, ืฉืื™ื ื” ืžืคืจื™ืขื” ืœื›ืœ ื”ืคื—ื•ืช ืœืฉื™ืžื•ืฉ ื”ืžืœื ื‘-NVIDIA GPU (ื•ืืคื™ืœื• ืขื•ื–ืจ, ื”ื•ื“ื•ืช ืœืžื™ืงื•ื“ ื”ืคื™ืชื•ื— ื•ื”ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ื‘ื™ื™ืฉื•ื ืื—ื“ ืฉืœ ื›ืœ ืคื•ืจืžื˜ ืžืชื—ืช ืœ-GPU ื‘ืžืงื•ื ืฉื ื™ื™ื ื™ื™ืฉื•ืžื™ื ืœืคื ื™).
  • ืชืžื™ื›ื” ื‘ืขืจื›ื•ืช ื”ื•ืจืื•ืช SIMD ื—ื“ืฉื•ืช - AVX2, AVX-512 (ื›ื•ืœืœ ืขื‘ื•ืจ ื”ื“ื•ืจ ื”ืฉื ื™ ืฉืœ Xeon Phi) ื•-MIC (ืœื“ื•ืจ ื”ืจืืฉื•ืŸ) - ื›ืžื• ื’ื ืฉื™ืžื•ืฉ ืื•ื ื™ื‘ืจืกืœื™ ื•ืžืœื ื™ื•ืชืจ ื‘- SIMD ื‘ื”ื˜ืžืขื•ืช ืฉืœ ืคื•ืจืžื˜ื™ื ืจื‘ื™ื, ื›ื•ืœืœ ื”ืฉื™ืžื•ืฉ ืฉืœ ืžืขืจื›ื™ ื”ื•ืจืื•ืช ืฉื ืชืžื›ื• ื‘ืขื‘ืจ ืœ-AVX ื•-XOP ื‘-x86(-64) ื•
    NEON, ASIMD ื•-AltiVec ืขืœ ARM, Aarch64 ื•-POWER, ื‘ื”ืชืืžื”. (ื—ืœืงื™ืช ื›ื—ืœืง ืž- GSoC 2015.)
  • ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ืจื‘ื•ืช ืขื‘ื•ืจ CPU ื•-OpenCL, ื”ืŸ ื›ื“ื™ ืœืขื‘ื•ื“ ื‘ืฆื•ืจื” ื™ืขื™ืœื” ื™ื•ืชืจ ืขื ืžืกืคืจ ืจื‘ ืฉืœ hashes ื‘ื•-ื–ืžื ื™ืช (ืœื“ื•ื’ืžื”, ื˜ืขื™ื ืช 320 ืžื™ืœื™ื•ืŸ hashes ืฉืœ SHA-1 ืขืœ ื”-GPU) ื•ื”ืŸ ื›ื“ื™ ืœื”ื’ื‘ื™ืจ ืืช ืžื”ื™ืจื•ืช ื—ื™ืฉื•ื‘ ื”ื’ื™ื‘ื•ื‘. ื—ืœืง ืžื”ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ื”ืœืœื• ื”ืŸ ืื•ื ื™ื‘ืจืกืœื™ื•ืช, ื—ืœืงืŸ ืžื›ืกื•ืช ืชืช-ืงื‘ื•ืฆื•ืช ืฉื•ื ื•ืช ืฉืœ ืคื•ืจืžื˜ื™ื, ื•ืจื‘ื•ืช ืžื”ืŸ ืกืคืฆื™ืคื™ื•ืช ืœืคื•ืจืžื˜ื™ื.
  • (ืื•ื˜ื•ืžื˜ื™) ืชืฆื•ืจื” ืฉืœ ืื—ืกื•ืŸ ืื•ืคื˜ื™ืžืœื™ ืฉืœ ืกื™ืกืžืื•ืช ืฉื ื‘ื“ืงื• ื‘ืžืขื‘ื“ ("-tune=auto -verbosity=5") ื•ื’ื“ืœื™ื ืื•ืคื˜ื™ืžืœื™ื™ื ืฉืœ ืขื‘ื•ื“ื” ื‘-OpenCL (ืžื•ืคืขืœ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ), ื›ื•ืœืœ ื”ืชื—ืฉื‘ื•ืช ื‘ื”ื’ื‘ืจื” ื”ืื™ื˜ื™ืช ืฉืœ NVIDIA GTX ืกื“ืจืช GPUs ืœืชื“ืจ ื”ืคืขืœื” ืžืœื 10xx ื•ืื™ืœืš. ืฉื™ืžื•ืฉ ื‘-hash ืฉื ื˜ืขืŸ ื‘ืคื•ืขืœ ื•ื‘ืื•ืจืš ื”ืืžื™ืชื™ ืฉืœ ื”ืกื™ืกืžืื•ืช ื”ื ื‘ื“ืงื•ืช (ื›ืืฉืจ ื–ื” ื™ื“ื•ืข ืžืจืืฉ) ืœื›ื•ื•ื ื•ืŸ ืื•ื˜ื•ืžื˜ื™ ื›ื–ื”.
  • ื”ื•ืกืคืช ืžื”ื“ืจ ืขื‘ื•ืจ "ื‘ื™ื˜ื•ื™ื™ื ื“ื™ื ืžื™ื™ื" ืฉืฆื•ื™ื ื• ื™ืฉื™ืจื•ืช ื‘ืฉื•ืจืช ื”ืคืงื•ื“ื” ื•ื”ื˜ืžืขืช ืกื•ื’ื™ hash ื”ื™ื‘ืจื™ื“ื™ื™ื ื—ื“ืฉื™ื, ืœืžืฉืœ "-format=dynamic='sha1(md5($p).$s)'", ื”ืžื—ื•ืฉื‘ ื‘ืžืขื‘ื“ ื‘ืืžืฆืขื•ืช SIMD . ื›ืžืจื›ื™ื‘ื™ื ืฉืœ ื‘ื™ื˜ื•ื™ื™ื ื›ืืœื”, ื ืชืžื›ื™ื ืขืฉืจื•ืช ื’ื™ื‘ื•ื‘ ืžื”ื™ืจื™ื (ืžื›ืืœื” ื ืคื•ืฆื™ื ื›ืžื• MD5 ื•ืขื“ ืืงื–ื•ื˜ื™ื™ื ื‘ื™ื ื•ื ื™ื™ื ื›ืžื• Whirlpool), ืฉืจืฉื•ืจ ืชืช-ืžื—ืจื•ื–ื•ืช, ืงื™ื“ื•ื“ ื•ืคืขื ื•ื—, ื”ืžืจืช ืจื™ืฉื™ื•ืช ืฉืœ ืชื•ื•ื™ื, ื”ืคื ื™ื•ืช ืœืกื™ืกืžื”, ืžืœื—, ืฉื ืžืฉืชืžืฉ ื•ืงื‘ื•ืขื™ ืžื—ืจื•ื–ืช.
  • ื‘ื™ื˜ื•ืœ ื”ื‘ื“ืœื™ื ืœื ืจืฆื•ื™ื™ื ืž-hashcat, ื›ื•ืœืœ ืชืžื™ื›ื” ื‘ืคืงื•ื“ื•ืช ื›ืœืœื™ื ืฉืœ ืจืฉื™ืžืช ืžื™ืœื™ื ืกืคืฆื™ืคื™ื•ืช ื‘ืขื‘ืจ ืœ-hashcat, ืžืขื‘ืจ ืœืžืกืคื•ืจ ืžื›ืฉื™ืจื™ OpenCL ืž-1, ืฉื™ืžื•ืฉ ื‘ืื•ืจื›ื™ ื‘ืจื™ืจืช ืžื—ื“ืœ ืฉืœ ืกื™ืกืžื” (ื‘ื“ืจืš ื›ืœืœ ืื•ืจืš 7) ืขื‘ื•ืจ ืžื‘ื—ื ื™ ื‘ื™ืฆื•ืขื™ื.
  • ืžืฆื‘ื™ ืคื™ืฆื•ื— ื—ื“ืฉื™ื, ื›ื•ืœืœ PRINCE ืž-hashcat (ื™ื•ืฆืจ "ื‘ื™ื˜ื•ื™ื™ื" ืขืœ ื™ื“ื™ ืฆื™ืจื•ืฃ ืžื™ืœื™ื ืžืจื•ื‘ื•ืช ื‘ืกื“ืจ ืขื•ืœื” ืฉืœ ืื•ืจืš ื›ื•ืœืœ), ืชืช-ืงื‘ื•ืฆื•ืช (ืžื‘ื™ื ืกื™ืกืžืื•ืช ืขื ืœื ืžืกืคื™ืง ืชื•ื•ื™ื ืฉื•ื ื™ื ื’ื ืื ื”ืชื•ื•ื™ื ื”ืœืœื• ืžื’ื™ืขื™ื ืžืงื‘ื•ืฆื” ื’ื“ื•ืœื” ืฉืœ ืชื•ื•ื™ื ืืคืฉืจื™ื™ื) ื•ืžืขืจื›ื•ืช ื—ื™ืฆื•ื ื™ื•ืช ื”ื™ื‘ืจื™ื“ื™ื•ืช (ืžืืคืฉืจ ืœืžืฆื‘ื™ื ื—ื™ืฆื•ื ื™ื™ื, ื”ืžืชื•ืืจื™ื ื‘ืงื•ื‘ืฆื™ ืชืฆื•ืจื” ื‘ืฉืคื” ื“ืžื•ื™ืช C, ืœื™ืฆื•ืจ ืกื™ืกืžืื•ืช ืจื‘ื•ืช ื”ื ื™ืชื ื•ืช ืœืื™ืžื•ืช ื‘ื”ืชื‘ืกืก ืขืœ ื›ืœ "ืžื™ืœื”" ื‘ืกื™ืกื™ืช ืฉื”ืชืงื‘ืœื” ืžืžืฆื‘ ืื—ืจ). ื›ืžื• ื›ืŸ, ืžืกืคืจ ืžืฆื‘ื™ื ื—ื™ืฆื•ื ื™ื™ื ื—ื“ืฉื™ื ืžื•ื’ื“ืจื™ื ืžืจืืฉ.
  • ืชื›ื•ื ื•ืช ื ื•ืกืคื•ืช ืœืฉื™ืžื•ืฉ ื‘ืžืกืคืจ ืžืฆื‘ื™ื ื‘ื•-ื–ืžื ื™ืช (ืื—ื“ ืขืœ ื’ื‘ื™ ื”ืฉื ื™ - ืขืจื™ืžื”), ื•ื›ืŸ ืœืฉื™ืžื•ืฉ ื›ื–ื” ื‘ืขืจื›ื•ืช ื›ืœืœื™ื (ืขืจื™ืžืช ื—ื•ืงื™ื ืฉืœ ืจืฉื™ืžืช ืžื™ืœื™ื).
  • ืฉื™ืคื•ืจื™ื ื‘ืžืฆื‘ื™ ื”ืžืกื›ื” (ืžืชื™ื—ืช ืžืกื›ื” ื”ื“ืจื’ืชื™ืช ื‘ื˜ื•ื•ื— ื”ืื•ืจื›ื™ื ืฉืฆื•ื™ืŸ, ื”ื—ืœืช ื”ืžืกื›ื” ื‘ืฆื“ ืฉืœ ืžื›ืฉื™ืจ OpenCL ืื• ืœื•ื— FPGA) ื•ืกื“ืง ื‘ื•ื“ื“ (ื”ืชื ื”ื’ื•ืช ืกื‘ื™ืจื” ื‘ืžื›ืฉื™ืจื™ื ืฉืžื—ืฉื‘ื™ื ืžืกืคืจ ืจื‘ ืฉืœ hashes ื‘ืžืงื‘ื™ืœ, ืฉื‘ืขื‘ืจ ื‘ืžืฆื‘ ื–ื” ื—ืกืจื•ืช ืกื™ืกืžืื•ืช ืœื‘ื“ื™ืงื”, ื•ื’ื ืžื’ื‘ืœื•ืช ืขืœ ืฆืจื™ื›ืช ื–ื™ื›ืจื•ืŸ).
  • ืฉื™ืคื•ืจื™ื ืจื‘ื™ื ื‘ืชืžื™ื›ื” ื‘-Unicode ื•ื‘ืงื™ื“ื•ื“ื™ื ืื—ืจื™ื ื‘ืชืชื™-ืžืขืจื›ื•ืช ืฉื•ื ื•ืช.
  • ืฉื™ืคื•ืจื™ื ืจื‘ื™ื ืœืชื•ื›ื ื™ื•ืช *2john (ื”ืžืจืช ืงื‘ืฆื™ื ื‘ืคื•ืจืžื˜ื™ื ืฉื•ื ื™ื ืœ
    ื”ืฉืชืžืฉ ืขื John), ื‘ืžื™ื•ื—ื“ wpapcap2john (ืžื˜ืคืœ ื‘ืชืขื‘ื•ืจืช WiFi).
  • ืืคืฉืจื•ื™ื•ืช ืจื‘ื•ืช ืฉืœ ืฉื•ืจืช ืคืงื•ื“ื” ื—ื“ืฉื•ืช, ื”ื’ื“ืจื•ืช john.conf, ืชืฆื•ืจืช ืืคืฉืจื•ื™ื•ืช ืกืงืจื™ืคื˜ ื•ื”ืชื›ื•ื ื•ืช ื”ื—ื“ืฉื•ืช ื”ืžืชืื™ืžื•ืช ืฉืœื”ืŸ, ืฉืœื ื›ื•ืœืŸ ื”ื•ื–ื›ืจื• ื›ืืŸ.
  • ืฉื™ืคื•ืจ ืื™ื›ื•ืช ื”ืงื•ื“ ืขืงื‘ ืชืžื™ื›ื” ืžื•ื‘ื ื™ืช ื‘ื‘ื ื™ื™ืช ื‘ืื’ื™ื ืขื AddressSanitizer (ืงื•ื“ื) ื•-UndefinedBehaviorSanitizer (ื ื•ืกืฃ), ื”ื•ืกืคืช fuzzer ืคื•ืจืžื˜ ืžื•ื‘ื ื” (ื‘ืชื•ืš GSoC 2015), ืชื•ืš ืฉื™ืžื•ืฉ ื‘ืื™ื ื˜ื’ืจืฆื™ื” ืจืฆื™ืคื” (ื‘ื•ื ื” ืœืขืฉืจื•ืช ืฉื™ืœื•ื‘ื™ ืžืขืจื›ื•ืช ื”ืคืขืœื” ื•ืงื•ืžืคื™ื™ืœืจ ื• ื‘ื•ื“ืงื™ื ืื•ืชื ืœืชืžื™ื›ื” ื ื›ื•ื ื” ื‘ื›ืœ ื”ืคื•ืจืžื˜ื™ื).

ืžืงื•ืจ: linux.org.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”