English | العربية | বাংলা | Bosanski | Deutsch | Español | Français | हिन्दी | Italiano | 日本語 | 한국어 | मराठी | Português | Русский | Kiswahili | தமிழ் | తెలుగు | Türkçe | اردو | Tiếng Việt | 中文
- પરિચય
- ઇન્સ્ટોલેશન
- ઉપયોગ
- રૂપરેખાંકન
- એડવાન્સ્ડ યુઝેજ
- ઓપ્ટિમાઇઝેશન
- સામાન્ય પેટર્ન
- મર્યાદાઓ
- સપોર્ટ માર્ગદર્શિકા
- लायसन्स - MIT लायसन्स
પરિચય
Recall એ Laravel માટેનું ઉચ્ચ-પ્રદર્શન ધરાવતું Redis ક્લાયન્ટ-સાઇડ કેશિંગ પેકેજ છે.これは Redis 6 の クライアントサイドキャッシング 機能を自動無効化と組み合わせて使用することにより、Redis の往復回数とレイテンシーを劇的に減少させます。Laravel Octane એન્વાયર્થમન્ટ માટે વિશિષ્ટ રીતે બનેલ, તે APCu અથવા Swoole Table નો ઉપયોગ કરે છે જે સ્થાનિક કેશ સ્તર તરીકે કાર્ય કરે છે જે માન્યતા સંદેશાઓ દ્વારા Redis સાથે સનુસારિત રહે છે.
જ્યારે તમે Redis માંથી મૂલ્ય મેળવો છો, ત્યારે Recall તેને સ્થાનિક રીતે સંગ્રહિત કરે છે. જ્યારે તે મૂલ્ય Redis માં ફેરવે છે (કોઈપણ ક્લાયન્ટ દ્વારા), Redis આપોઆપ Recall ને સ્થાનિક કોપીનું અમલ રદ કરવા માટે જાણ કરે છે.これは、メモリ内キャッシングの速度と Redis の一貫性保証を提供します。
મુખ્ય વિશેષતાઓ
- આપોઆપ અમલ રદ: Redis જ્યારે કેશ થયેલ કી બદલાશે ત્યારે તમારી એપ્લિકેશનને જાણ કરે છે, જે કેશ સહમતતાને નિશ્ચિત કરે છે
- શૂન્ય રૂપરેખાંકન: યોગ્ય ડિફૉલ્ટ સાથે બહારના બોક્સમાં કામ કરે છે
- Octane મિશ્રણ: આપોઆપ કનેક્શન ગરમ કરવું, વિનંતી આધારીત અમલ રદ પ્રક્રિયા અને શાંતિથી બંધ કરવું
- ડ્યુઅલ ડ્રાઇવર સપોર્ટ: બધા Octane સર્વર માટે APCu, Swoole/OpenSwoole એન્વાયર્પમંટ માટે Swoole Table
- ચૂંટણકર કેશિંગ: કઈ કી પૂર્વફોર્મેટને સ્થાનિક રીતે કેશ કરવું તે પારિમાણિત કરો
- રેસ કండિશન સુરક્ષા: વારસાતમ મુકાબલાના કેસોમાં બોજિંગ માહિતીમાંથી કેશિંગ અટકાવવા માટે પેન્ડિંગ વિનંતી ટ્રેકિંગ
ઉદાહરણ
// Recall તરીકે તમારા કેશ ડ્રાઇવર રૂપરેખાંકિત કરો// config/cache.php'stores' => [ 'recall' => [ 'driver' => 'recall', ],], // તેને Laravel કેશની જેમ જ ઉપયોગ કરોuse Illuminate\Support\Facades\Cache; // પ્રથમ કોલ: Redis માંથી મેળવવું, સ્થાનિક રીતે સંગ્રહિત છે$user = Cache::store('recall')->get('user:1'); // આ મોબાઇલ કૉલ: સ્થાનિક APCu/Swoole Table (માઈક્રોસેકન્ડ)$user = Cache::store('recall')->get('user:1'); // જ્યારે user:1 ક્યાંય અપડેટ થાય છે, Redis Recall ને સ્થાનિક કોપી રદ કરવા માટે જાણ કરે છેCache::store('recall')->put('user:1', $newUserData, 3600);// તમામ વર્કરો પર સ્થાનિક કેશ આપોઆપ અમલ રદ કરવામાં આવે છે
ઇન્સ્ટોલેશન
Composer મારફતે પેકેજ ઇન્સ્ટોલ કરો:
composer require defectivecode/laravel-recall
આવશ્યકતાઓ
- PHP >= 8.4
- Laravel 11.x અથવા 12.x
- Laravel Octane
- Redis 6.0+ (ક્લાયંટ-સાઇડ કેશિંગ સપોર્ટ માટે)
- ext-apcu અથવા ext-swoole (સ્થાનિક કેશ માટે ઓછામાં ઓછા એકની જરૂર છે)
ઉપયોગ
સુધારો
- Recall કેશStores ને તમારી
config/cache.phpમાં ઉમેરો:
'stores' => [ // ... અન્ય સ્ટોર્સ 'recall' => [ 'driver' => 'recall', ],],
- તમારા એપ્લિકેશનમાં કેશ સ્ટોરનો ઉપયોગ કરો:
use Illuminate\Support\Facades\Cache; // મૂલ્ય સંગ્રહિત કરો (Redis માં લખતા)Cache::store('recall')->put('key', 'value', 3600); // મૂલ્ય મેળવો (પ્રથમ કોલ Redis ને પહોંચે છે, જતાં કોલ ગંભીર કેશનો ઉપયોગ કરે છે)$value = Cache::store('recall')->get('key'); // મૂલ્ય કાઢી નાખોCache::store('recall')->forget('key');
કેવી રીતે કામ કરે છે
- પ્રથમ વાંચન: મૂલ્ય Redis માંથી મેળવવામાં આવે છે અને સ્થાનિક APCu/Swoole Table કેશમાં સંગ્રહિત થાય છે
- આગળના વાંચનો: મૂલ્ય સીધા સ્થાનિક યાદીમાં અનુભવવામાં આવે છે (ઉપ-મિલિસેકંડ)
- કેટલાય જગ્યા: જ્યારે કોઈપણ ક્લાયન્ટ Redis માં કી સજ્જ કરે છે, ત્યારે Redis અમલ રદ સંદેશ મોકલે છે
- આપોઆપ અમલ રદ: Recall સંદેશ મેળવશે અને સ્થાનિક કેશમાંથી કી દૂર કરશે
- આગળનું વાંચન: તાજું મૂલ્ય Redis માંથી નીચે ઑફ-કેશ કેશ થઈ શકે છે
આ પેટર્ન ખાસ કરીને Laravel Octane એન્વાયર્થમન્ટમાં શક્તિશાળી છે જ્યાં વર્કર્સ વિનંતીઓ વચ્ચે ટકાવી રાખે છે, વિસ્તૃત કેશ બનાવવાની અને ખાતાના બહારની અનેક વિનંતીઓને વધુ_MEMORY ની જરૂર પડે તેવી જરૂરિયાત વધાવે છે.
Octane મિશ્રણ
Recall તમારી ટકાઉ Octane સાથે આપોઆપ મિશ્રણ કરે છે:
- કાર્યકર્તા શરૂ કરી રહ્યા છે: Redis અમલ રદ કનેક્શન સ્થાપિત કરે છે (ગરમ શરૂ)
- વિનંતી પ્રાપ્ત: કોઈપણ પેન્ડિંગ અમલ રદ સંદેશો પ્રક્રિયા કરે છે
- કાર્યકર્તા બંધ કરવાનો: સુગમ બંધ કરે છે
યાદ રાખો કે વધુ રૂપરેખાંકનની જરૂર નથી. જ્યારે Octane સ્થાપિત છે, ત્યારે મિશ્રણ આપોઆપ થાય છે.
રૂપરેખાંકન
રૂપરેખાંકન ફાઈલ પ્રકાશિત કરો:
php artisan vendor:publish --tag=recall-config
આ config/recall.php બનાવે છે જેમાં નીચેના વિકલ્પો છે:
સક્ષમ/અસક્ષમ
'enabled' => env('RECALL_ENABLED', true),
જ્યારે અસક્ષમ હોય છે, Recall સ્થાનિક કેશ સ્તરનો ઉપયોગ કર્યા વિના કિલ્લેઝની સીધે Redis માં પસાર થાય છે. આ ડિબગિંગ અથવા ધીમે ધીમે વહન કરવા માટે ઉપયોગી છે.
Redis કેશ
'redis_store' => env('RECALL_REDIS_STORE', 'redis'),
Redis કામગીરીઓ માટે કેશStores. આ તમારા config/cache.php માં રૂપરેખાંકિત એક Redis સ્ટોરને ઉલ્લેખિત કરે છે.
કેશ પૂર્વફોર્મેટ
'cache_prefixes' => [],
આપણે માત્ર આ પૂર્વફોર્મેટ સાથે મેલ ખાય તે કેશ ટાળશો. જો અણધરું જગ્યા જોઈને બધા ચિન્હો કેશ કરવા માટે છે.
// માત્ર વપરાશકર્તા અને ગાળતી કેશની કેશિંગ કરવાનું પસંદ કરવું'cache_prefixes' => ['users:', 'settings:', 'config:'],
જ્યારે તે ખૂબ જ કમોસમી માર્ગે બદલાય છે અને સ્થાનિક કેશ ન હોવું જોઈએ, ત્યારે તે લાભદાયી થાય છે.
સ્થાનિક કેશ રૂપરેખાંકન
'local_cache' => [ // ડ્રાઇવર: "apcu" અથવા "swoole" 'driver' => env('RECALL_LOCAL_DRIVER', 'apcu'), // સ્થાનિક કેશ કીઝ માટે પૂર્વફોર્મેટ 'key_prefix' => env('RECALL_LOCAL_PREFIX', 'recall:'), // ડિફોલ્ટ TTL સેકંડમાં (સાવચેતી નેટ જ્યારે અમલ રદ ચૂકવવામાં આવે) 'default_ttl' => (int) env('RECALL_LOCAL_TTL', 3600), // Swoole Table કદ (2 ના શક્તિઓ, માત્ર Swoole ડ્રાઇવર માટે) 'table_size' => (int) env('RECALL_SWOOLE_TABLE_SIZE', 65536), // Swoole Table માં મહત્તમ બાઇટ્સ પ્રતિ મૂલ્ય (ફક્ત Swoole ડ્રાઇવર માટે) 'value_size' => (int) env('RECALL_SWOOLE_VALUE_SIZE', 8192),],
APCu ડ્રાઇવર (ડિફોલ્ટ)
APCu ડ્રાઇવર તમામ PHP એન્વાયર્થમન્ટ અને Octane સર્વરો (Swoole, RoadRunner, FrankenPHP) સાથે કાર્ય કરે છે. бұл ескі өлшемдеріңізді ескере отырып, сіздің құралдарыңыз сөйлесіп тұруға мүмкіндік береді.
आवश्यकताएँ:
- ext-apcu બિજ્conflicted આપણે અને પૂરો
apc.enable_cli=1CLI ઉપયોગ માટે php.ini માં
Swoole Table ડ્રાઇવર
Swoole Table ડ્રાઇવર Swoole ની શેર કરેલી સંજ્ઞાઓનો ઉપયોગ કરે છે, તે હવેથી કામકાજમાં તાજી ઉપલબ્ધ માહિતી આપે છે. Swoole/OpenSwoole એન્વાયર્થમન્ટ માટે શ્રેષ્ઠ.
ક્રોનફિગ્રેશન મુલ્લા:
table_size: 2 ના શક્તિઓ હોવું જોઈએ (ઉદાહરણ તરીકે, 65536, 131072). એ最大エントリー数を決めます。value_size:નાં સલામતી મૂલ્યો માટે મહત્તમ બાઇટ્સ. મોટાં મૂલ્યો સાઇલેન્ટ રીતે કાપી લેવામાં આવે છે.
Octane સૂચકો
'listeners' => [ // કાર્યકર્તા શરૂ થાય ત્યારે ગરમ કનેક્શન (પ્રથમ વિનંતી લેટેન્સીને ઘટાડે છે) 'warm' => env('RECALL_LISTEN_WARM', true), // ટીક ઇવેન્ટ્સ પર અમલાન્વયનને પ્રક્રિયા કરતી વખતે (માત્ર પ્રમાણભૂત, થોડી વધુ વ્યાખ્યા મુશ્કેલ છે) 'tick' => env('RECALL_LISTEN_TICK', false),],
ગરમ કનેક્શન
જ્યારે સક્ષમ હોય છે, Recall Octane કાર્યકર્તા શરૂ થયા સમયે Redis અમલ રદ સભ્યતા સ્થાપિત કરે છે. આ પહેલું વિનંતી પર કનેક્શનની લેટેન્સી દૂર કરે છે.
ટીક્ક પ્રોસેસિંગ
જ્યારે સક્ષમ હોય છે, Recall Octane ટીક્ક ઇવેન્ટ્સ અને વિનંતી સંશોધન એન્ટર કરે છે. આ વધુ પ્રતિસાદાત્મક કેશ અમલ રદ આવે છે,વિશ્વાસ પૂર્વક થોડી વધુ કસ્ટમાઇઝ કરશો.
એડવાન્સ્ડ યુઝેજ
મેન્યુઅલ અમલ રદ પ્રક્રિયા
જો તમે મેન્યૂઅલ રીતે અમલ રદ કરવાની જરૂર છે (ઉદાહરણ તરીકે, લાંબા સમય સુધી ચાલતી પ્રક્રિયામાં):
use DefectiveCode\Recall\RecallManager; $manager = app(RecallManager::class);$manager->processInvalidations();
સ્થાનિક કેશ ખાલી કરવી
ફક્ત સ્થાનિક કેશને ખાલી કરવા માટે જે Redisને અસર નહીં કરે:
use DefectiveCode\Recall\RecallManager; $manager = app(RecallManager::class);$manager->flushLocalCache();
કનેક્શન વ્યવસ્થાપન
use DefectiveCode\Recall\RecallManager; $manager = app(RecallManager::class); // જો અમલ રદ મંડળી જોડાયેલ છેif ($manager->isConnected()) { // ...} // મેન્યુઅલ કર્યા વિના$manager->disconnect();
ઓપ્ટિમાઇઝેશન
કાર્યકર્તા વિનંતી મર્યાદાઓ
Laravel Octane કાર્યકર્તાઓને રૂપરેખાંકિત સંખ્યાતો માટે મર્યાદા રાખે છે જેથી મેમરી લીકનું અડચણ આવે. જ્યારે કાર્યકર્તા ચક્ર થાય છે, ત્યારે તેનું સ્થાનિક કેશ સાફ થાય છે. આ મર્યાદાને વધારવું Recall નું સ્થાનિક કેશ લાંબા સમયમાં જાળવી રાખવામાં મદદ કરે છે, કેશ હિટ રેટ્સમાં સુધારો કરે છે.
તમારા config/octane.php માં:
// ડીફોલ્ટ 500 વિનંતીઓ છે'max_requests' => 10000,
ઉંચા મૂલ્યો મેડ-કેશ ઉપયોગીતા પ્રદાન કરે છે પરંતુ ખાતરી લેવાની જરૂર છે કે તમારી એપ્લિકેશનમાં મેમોરી લીક નથી. આ મૂલ્યને ઢાંકવા માટે તમારા કાર્યકર્તાના મેમરી ઉપયોગને નજર રાખો.
દેખા કેશિંગ-પૂર્ણ કેશિંગ સાથે પૂર્વવાનચો
ચૂંટણક કેશિંગ માટે cache_prefixes નો ઉપયોગ કરો. આ ત્યારે કિંમતી છે:
- ઉચ્ચ-ચર્ન કી: કેટલાક કી એટલા ઘટ કે સ્થાનિક કેશિંગ ઓછું લાભતા હોય છે
- મોટા મૂલ્યો: છલકાતા યાદી કેશ છોડીને મેમરી દબાણ ઘટાડો
- સંવેદનશીલ માહિતી: કેટલીક માહિતી જરૂરીયાતોમાં Redd હાલ પાડવી
// config/recall.php'cache_prefixes' => [ 'users:', // સ્થાનિક કેશમાં વપરાશકર્તા ડેટા કેશ 'settings:', // અપ્લિકેશન ગાળવા 'products:', // ઉત્પાદન કેટલીક કેશ],
આ પૂર્વફોર્મેટ બંધિત કરાતા ટપકાયેલામોડે તેStill ફાલી સ્મૃતિ કેશિંગનો વિરોધ કરે છે.
સ્મૃતિ વિચારો
APCu સ્મૃતિ
APCu બધા PHP પ્રક્રિયાઓમાં સ્મૃતિ શેર કરે છે. php.iniમાં સ્મૃતિ મર્યાદાને રૂપરેખાંકિત કરો:
; ડીફોલ્ટ 32MB છે, મોટા કેશની જરૂર હોય ત્યારે વધારવા માટેapc.shm_size = 128M
apcu_cache_info() સાથે APCu ઉપયોગને નજર રાખો:
$info = apcu_cache_info();$memory = $info['mem_size']; // વર્તમાન સ્મૃતિનો ઉપયોગ બાઇટ્સમાં
Swoole Table કદ
Swoole Tables નિશ્ચિત ક્ષમતા સાથે રચેલી હોય છે. તમારી અપેક્ષિત કેશ કદ માટે યોજના બનાવો:
'local_cache' => [ // મહત્તમ પ્રવેશો (2 ની શક્તિમાં) 'table_size' => 65536, // 64K પ્રવેશો // બાઇટ્સમાં મહત્તમ સીની શ્રેણી 'value_size' => 8192, // 8KB પ્રતિ મૂલ્ય],
સ્મૃતિ વપરાશ: table_size × (value_size + overhead). 65536 પ્રવેશો સાથે અને 8KB મૂલ્યો એફિસિઓમાં લગભગ 512MB જેટલું મેમરી વાપરે છે.
સામાન્ય પેટર્ન
એપ્લિકેશન રૂપરેખાંકન
// કેશ ફીચર ફ્લેગ્સ અને સેટટિંગ્સ$features = Cache::store('recall')->remember('config:features', 3600, function () { return Feature::all()->pluck('enabled', 'name')->toArray();}); // જ્યારે સેટિંગ્સ બદલાય છે, ત્યારે તમામ કાર્યકતાઓ આપોઆપ અપડેટ મેળવનાર રહેશે
વારંવાર ઍક્સેસ થયેલ સંદર્ભ ડેટા
// ઉત્પાદન શ્રેણીઓ કેશ$categories = Cache::store('recall')->remember('categories:all', 3600, function () { return Category::with('children')->whereNull('parent_id')->get();}); // ચલણ વિનિમય દર કેશ$rates = Cache::store('recall')->remember('rates:exchange', 300, function () { return ExchangeRate::all()->pluck('rate', 'currency')->toArray();});
કેશ ટૅગ્સ વિકલ્પ
Recall કેશ ટૅગ્સને સપોર્ટ નથી કરતી, પરંતુ તમે પૂર્વફોર્મેટ સાથે સમાન કાર્યક્ષમતા મેળવી શકો છો:
// ટૅગ્સના બદલે, સતત પૂર્વફોર્મેટનો ઉપયોગ કરોCache::store('recall')->put("blog:posts:{$id}", $post, 3600);Cache::store('recall')->put("blog:comments:{$postId}", $comments, 3600); // પૂર્વફોર્મેટનું ઉપયોગ કરી સમગ્ર બ્લોગ સંબંધિત કેશને સાફ કરો (મેન્યુઅલ અમલની જરૂર)
મર્યાદાઓ
Redis ક્લેસ્ટર મોડી
Recall Redis ક્લસ્ટર મોડીનો સમર્થન નથી આપતો. CLIENT TRACKING આદેશના REDIRECT વિકલ્પને ડેટા કનેક્શન અને અમલ રદ સભ્યતા કનેક્શન એક જ Redis નોડ પર હોવું જોઈએ. ક્લસ્ટરમાં કીઓ હેશ Slots ની આધાર પર મલ્ટિ નોડ માં વિતરિત થાય છે, જેના કારણે જુદા જુદા નોડમાં જમાની ધરાવું માન્યાને પ્રાપ્ત કરવી અશોધ્ય છે.
ક્લસ્ટરિત Redis ડિપ્લોયમેન્ટ્સ માટે, ધ્યાનમાં લો:
- ક્લાયંટ-સાઇડ કેશિંગથી લાભ મેળવતા કેશ ડેટા માટે એક જ Redis નવલકથાનો ઉપયોગ કરો
- અન્ય માહિતી માટે Redis ક્લસ્ટરનો ઉપયોગ કરો તેમ છતાં ઓપ્ટિમલ મર્યાદા, સ્થિર માહિતી
standaloneરચક પર રાખી રાખવામાં આવે છે
સપોર્ટ માર્ગદર્શિકા
આપણી ઓપન સોર્સ પેકેજ પસંદ કરવા માટે તમારો આભાર! કૃપા કરીને આ સેટેલાઈટ માર્ગદર્શિકાઓને ચકાસવા માટે થોડી મિનિટો પસાર કરો. આ પગલાં તમે અમારી યોજના પરથી વધુ સારી રીતે ઉપયોગી થવામાં મદદ કરશે.
સમુદાય ચલિત સહાયતા
અમારી ઓપન-સોર્સ યોજના અમારી શાનદાર સમુદાય દ્વારા ચલાવવામાં આવે છે. જો તમારી પાસે પ્રશ્નો છે અથવા સહાયતા જરૂર છે, તો સ્ટેકઓવરફ્લો અને અન્ય ઓનલાઈન સાધનો તમારા શ્રેષ્ઠ વિકલ્પ છે.
બગ્સ અને ફીચર પ્રાયોરિટાઈઝેશન
એક ઓપન-સોર્સ યોજના સંચાલિત કરવાનો વાસ્તવિકતાનો અર્થ એ છે કે દરેક નોંધાયેલા બગ અથવા ફીચર વિનંતી તરત ઠીક કરી શકતા નથી. અમે મુદ્દાઓને નીચેના ક્રમમાં પ્રાથમિકતા આપીએ છીએ:
1. અમારા પેઇડ ઉત્પાદનોને અસર કરતી બગ્સ
આપણાં પેઇડ ઉત્પાદનોને અસર કરતી બગ્સ હંમેશા અમારી ટોચની પ્રાથમિકતા રહેશે. કેટલીકવાર, અમે ફક્ત તે બગ્સને addressed કરીશું જે અમારો સીધો અસર કરે છે.
2. સમુદાય પુલ વિનંતીઓ
જો તમે એક બગ ઓળખી લીધો છે અને ત્યાં એક ઉકેલ છે, તો કૃપા કરીને પુલ વિનંતિ રજૂ કરો. અમારી ઉત્પાદનોને અસર કરતી મુદ્દા પછી, અમે આ સમુદાય ચલિત ઉકેલો માટે આગામી ઉંચી પ્રાથમિકતા પ્રદાન કરીએ છીએ. એક વાર સમીક્ષા અને મંજૂરી મેળવ્યા પછી, અમે તમારા ઉકેલને ઉમેરશું અને તમારી મુસદ્દાને માન આપશું.
3. નાણાની સહાયતા
ઉલ્લેખિત શ્રેણીઓની બહારના મુદ્દાઓ માટે, તમે તેમના સમાધાન માટે નાણાની સહાયતા આપવા માટે પસંદ કરી શકો છો. મોટી સમસ્યાઓ દરખાસ્તના ફોર્મ સાથે જોડાયેલી છે જયાં તમે નાણાંકીય રીતે ઇનામ આપી શકો છો. અમે આ મુદ્દાઓને આપવામાં આવેલા નાણાંની રકમના આધારે પ્રાથમિકતા આપીએ છીએ.
સમુદાયના યોગદાન
ઓપન સોર્સ ત્યારે જ જીવંત રહે છે જ્યારે તેની સમુદાય સક્રિય છે. જો તમે બગ્સને ઠીક નથી કરી રહ્યાં, તો કોડના સુધારા, દસ્તાવેજી અપડેટ, ટ્યુટોરિયલ્સ માધ્યમથી યોગદાન આપવાની ચૂકવણી કરો અથવા સમુદાય ચેનલોમાં અન્ય લોકોને મદદ કરે. અમે દરેકને બળાતમ ઉમેદવારી આપવાની ઉદ્બનકતામાં મદદરૃષ માટે ઉત્સાહિત કરીએ છીએ.
ફરીથી પુનરાવર્તન કરીએ, DefectiveCode બગ્સને અમારી પેઇડ ઉત્પાદનો પર કેવી રીતે અસર કરે છે તેના આધારે પ્રાથમિકતા આપશે, સમુદાય પુલ વિનંતીઓને, અને મુદ્દાઓ માટે મળેલ નાણાંકીય સહાયતા.
लायसन्स - MIT लायसन्स
कॉपीराइट © Defective Code, LLC. सर्व हक्क राखीव आहेत
या संगणक प्रोग्रामचा आणि संबंधित दस्तऐवज फाइल्स (या "सॉफ्टवेअर" म्हणून) एक प्रती मिळवणाऱ्या कोणत्याही व्यक्तीला, निर्बंधाशिवाय सॉफ्टवेअरमध्ये व्यवहार करण्याची परवानगी दिली जाते, ज्यात वापरण्याच्या, कॉपी करण्याच्या, सुधारित करण्याच्या, विलीन करण्याच्या, प्रकाशित करण्याच्या, वितरणाच्या, उपलायन करण्याच्या, आणि/किंवा सॉफ्टवेअरच्या प्रतींची विक्री करण्याच्या अधिकारांचा समावेश आहे, आणि ज्यांना सॉफ्टवेअर दिला जातो त्यांना असे करण्याची परवानगी देणे, खालील अटींच्या अधिन जातात:
वर उल्लेखित कॉपीराइट नोटिस आणि ही परवानगी नोटिस सर्व प्रतींमध्ये किंवा सॉफ्टवेअरच्या महत्त्वाच्या भागांमध्ये समाविष्ट केली जावी.
सॉफ्टवेअर "जसे आहे" दिले जाते, कोणत्याही प्रकारच्या वॉरन्टीशिवाय, स्पष्ट किंवा अप्रत्यक्ष, विक्रीसाठी तयार असणे, विशेष उद्देशासाठी योग्य असणे आणि कॉपीराइटचा भंग न करणारे यांचा समावेश, पण यापर्यंत सीमित नाही. लेखक किंवा कॉपीराइट धारक कोणत्याही दाव्यांसाठी, नुकसानांसाठी किंवा इतर जबाबदाऱ्याासाठी उत्तरदायी नाहीत, हे कॉन्ट्रॅक्ट, टॉर्ट किंवा इतर कोणत्याही प्रकारात असो, सॉफ्टवेअरशी संबंधित किंवा सॉफ्टवेअरसह किंवा इतर व्यवहारासंबंधी येणारे.