ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ²-прослоСк, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… доступ ΠΊ GPL-Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ ядра Linux

ΠšΡ€ΠΈΡΡ‚ΠΎΡ„ Π₯Π΅Π»Π²ΠΈΠ³ (Christoph Hellwig), извСстный Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ядра Linux, Π² своё врСмя Π²Ρ…ΠΎΠ΄ΠΈΠ²ΡˆΠΈΠΉ Π² ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ тСхничСский ΠΊΠΎΠΌΠΈΡ‚Π΅Ρ‚ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Linux Foundation ΠΈ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Π²ΡˆΠΈΠΉ истцом Π² связанном с GPL судСбном Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π΅ с VMware, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» ΡƒΠΆΠ΅ΡΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‚Ρƒ ΠΎΡ‚ связывания ΠΏΡ€ΠΎΠΏΡ€ΠΈΠ΅Ρ‚Π°Ρ€Π½Ρ‹Ρ… Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ ядра Linux, экспортируСмыми Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ GPL. Для ΠΎΠ±Ρ…ΠΎΠ΄Π° ограничСния Π½Π° экспорт GPL-символов ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ ΠΏΡ€ΠΎΠΏΡ€ΠΈΠ΅Ρ‚Π°Ρ€Π½Ρ‹Ρ… Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ-прослойку, ΠΊΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ ΠΈ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ GPLv2, Π½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сводятся ΠΊ трансляции доступа ΠΏΡ€ΠΎΠΏΡ€ΠΈΠ΅Ρ‚Π°Ρ€Π½ΠΎΠ³ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΊ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ API ядра, Π·Π°ΠΏΡ€Π΅Ρ‰Ρ‘Π½Π½Ρ‹ΠΌ для использования ΠΈΠ· ΠΏΡ€ΠΎΠΏΡ€ΠΈΠ΅Ρ‚Π°Ρ€Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ.

Для блокирования ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΌΠ°Π½Ρ‘Π²Ρ€Π° ΠšΡ€ΠΈΡΡ‚ΠΎΡ„ Π₯Π΅Π»Π²ΠΈΠ³ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ» для ядра Linux ΠΏΠ°Ρ‚Ρ‡ΠΈ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ наслСдованиС Ρ„Π»Π°Π³ΠΎΠ², связанных с экспортом GPL-символов. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ сводится ΠΊ наслСдованию Ρ„Π»Π°Π³Π° TAINT_PROPRIETARY_MODULE Π²ΠΎ всСх модулях, ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… символы ΠΈΠ· ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ с Π΄Π°Π½Π½Ρ‹ΠΌ Ρ„Π»Π°Π³ΠΎΠΌ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли GPL ΠΌΠΎΠ΄ΡƒΠ»ΡŒ-прослойка попытаСтся ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ символы ΠΈΠ· Π½Π΅-GPL модуля, Ρ‚ΠΎ GPL-ΠΌΠΎΠ΄ΡƒΠ»ΡŒ унаслСдуСт ΠΌΠ΅Ρ‚ΠΊΡƒ TAINT_PROPRIETARY_MODULE ΠΈ Π½Π΅ смоТСт ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ ядра, доступным Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ GPL, Π΄Π°ΠΆΠ΅ Ссли ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Ρ€Π°Π½Π΅Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π» символы ΠΈΠ· ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ «gplonly».

ΠŸΡ€ΠΈ обсуТдСнии Ρ‚Π°ΠΊΠΆΠ΅ Π±Ρ‹Π»ΠΎ высказано ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ΅ — Ссли ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ символы EXPORT_SYMBOL_GPL, Π»ΡŽΠ±Ρ‹Π΅ экспортируСмыС Π΄Π°Π½Π½Ρ‹ΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ символы Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ модулями, явно Π½Π΅ Π·Π°ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΌΠΈ ΠΎ совмСстимости с GPL. Π’.Π΅. Ссли ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ символы EXPORT_SYMBOL_GPL, Ρ‚ΠΎ всС Π΅Π³ΠΎ экспортируСмыС символы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ EXPORT_SYMBOL_GPL. ΠšΡ€ΠΈΡΡ‚ΠΎΡ„ Π₯Π΅Π»Π²ΠΈΠ³ написал, Ρ‡Ρ‚ΠΎ Π½Π° 100% согласСн с Π΄Π°Π½Π½Ρ‹ΠΌ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π΅ пропустит Линус Π’ΠΎΡ€Π²Π°Π»ΡŒΠ΄Ρ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ нСдоступности для ΠΏΡ€ΠΎΠΏΡ€ΠΈΠ΅Ρ‚Π°Ρ€Π½Ρ‹Ρ… Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² большСй части подсистСм ядра, ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ символы, экспортируСмыС ΠΏΠΎΠ΄ GPL.

ИзмСнСниС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠΌ ΠΈΠ· Facebook сСрии ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π½ΠΎΠ²ΠΎΠΉ подсистСмы netgpu, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ прямой ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ (DMA
zero-copy) ΠΌΠ΅ΠΆΠ΄Ρƒ сСтСвой ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ ΠΈ GPU, ΠΏΡ€ΠΈ этом выполняя ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° силами CPU. ΠΠ΅Π΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π²Ρ‹Π·Π²Π°Π»Π° Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΏΡ€ΠΎΠΏΡ€ΠΈΠ΅Ρ‚Π°Ρ€Π½Ρ‹Ρ… Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² NVIDIA Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅ΠΌΡƒΡŽ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°ΠΌΠΈ GPL-прослойку. Π’ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΠΊΡ€ΠΈΡ‚ΠΈΠΊΡƒ Π°Π²Ρ‚ΠΎΡ€ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ ΡƒΠΊΠ°Π·Π°Π», Ρ‡Ρ‚ΠΎ подсистСма Π½Π΅ привязана ΠΊ NVIDIA ΠΈ Π΅Ρ‘ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ обСспСчСна Π² Ρ‚ΠΎΠΌ числС для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… интСрфСйсов ΠΊ GPU AMD ΠΈ Intel. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ netgpu Π² ядро Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΈΠ·Π½Π°Π½ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ Π΄ΠΎ появлСния Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π½Π° основС свободных Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ AMDGPU, Intel i915 ΠΈΠ»ΠΈ Nouveau.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ