Repozitoriu de software
Un repozitoriu de software, sau pe scurt repo, este o locație de stocare pentru pachete software. Adesea, este stocat și un cuprins, împreună cu metadatele. Un depozit de software este de obicei gestionat de controlul sursei sau al versiunilor sau de manageri de depozite. Managerii de pachete permit instalarea și actualizarea automată a depozitelor, uneori numite „pachete”.
Prezentare generală
[modificare | modificare sursă]Mulți editori de software și alte organizații mențin servere pe internet în acest scop, fie gratuit, fie contra cost. Depozitele pot fi destinate exclusiv anumitor programe, cum ar fi CPAN pentru limbajul de programare Perl, sau unui întreg sistem de operare. Operatorii unor astfel de depozite oferă de obicei un sistem de gestionare a pachetelor, instrumente destinate căutării, instalării și manipulării în alt mod a pachetelor software din depozite. De exemplu, multe distribuții Linux utilizează Advanced Packaging Tool (APT), întâlnit în mod obișnuit în distribuțiile bazate pe Debian, sau Yellowdog Updater, Modified (yum), găsit în distribuțiile bazate pe Red Hat. Există, de asemenea, mai multe sisteme independente de gestionare a pachetelor, cum ar fi pacman, utilizat în Arch Linux și equo, găsit în Sabayon Linux.

Întrucât depozitele de software sunt concepute să includă pachete utile, depozitele majore sunt concepute să fie lipsite de programe malware. Dacă un computer este configurat să utilizeze un depozit semnat digital de la un furnizor de renume și este cuplat cu un sistem de permisiuni adecvat, acest lucru reduce semnificativ amenințarea programelor malware la adresa acestor sisteme. Ca efect secundar, multe sisteme care au aceste capacități nu au nevoie de software anti-malware, cum ar fi software-ul antivirus.[1]
Majoritatea distribuțiilor importante de Linux au multe repozitorii în întreaga lume care oglindesc repozitoriul principal.
La partea de client, un manager de pachete ajută la instalarea din repozitorii și actualizarea acestora.
Sistem de gestionare a pachetelor vs. proces de dezvoltare a pachetelor
[modificare | modificare sursă]Un sistem de gestionare a pachetelor este diferit de un proces de dezvoltare a pachetelor.
O utilizare tipică a unui sistem de gestionare a pachetelor este de a facilita integrarea codului din surse posibil diferite într-o unitate de operare coerentă și independentă. Astfel, un sistem de gestionare a pachetelor ar putea fi utilizat pentru a produce o distribuție de Linux, eventual o distribuție adaptată unei aplicații restricționate specifice.
Un proces de dezvoltare a pachetelor, prin contrast, este utilizat pentru a gestiona co-dezvoltarea codului și a documentației unei colecții de funcții sau rutine cu o temă comună, producând astfel un pachet de funcții software care, de obicei, nu va fi complet și utilizabil de la sine. Un proces bun de dezvoltare a pachetelor va ajuta utilizatorii să se conformeze unor bune practici de documentație și codare, integrând un anumit nivel de testare unitară.
Repozitoare selectate
[modificare | modificare sursă]Următorul tabel listează câteva limbaje cu repozitorii pentru software contribuit. Coloana „Verificări automate” descrie verificările de rutină efectuate.
Foarte puține persoane au capacitatea de a-și testa software-ul sub mai multe sisteme de operare cu versiuni diferite ale codului de bază și cu alte pachete contribuite pe care le pot utiliza. Pentru limbajul de programare R, Rețeaua de Arhive R Comprehensive (CRAN) execută teste în mod curent.
Pentru a înțelege cât de valoros este acest lucru, imaginați-vă o situație cu doi dezvoltatori, Sally și John. Sally contribuie cu pachetul A. Sally rulează versiunea curentă a software-ului doar sub o singură versiune de Microsoft Windows și a testat-o doar în acel mediu. La intervale mai mult sau mai puțin regulate, CRAN testează contribuția lui Sally sub o duzină de combinații de sisteme de operare și versiuni ale software-ului de bază în limbajul R. Dacă unul dintre ele generează o eroare, primește acel mesaj de eroare. Cu puțin noroc, detaliile acelui mesaj de eroare pot oferi suficiente informații pentru a permite o remediere a erorii, chiar dacă nu o poate reproduce cu hardware-ul și software-ul său actual. În continuare, să presupunem că John contribuie la depozit cu pachetul B care utilizează un pachet A. Pachetul B trece toate testele și este pus la dispoziția utilizatorilor. Ulterior, Sally trimite o versiune îmbunătățită a pachetului A, care încalcă B. Verificările automate fac posibilă furnizarea de informații către John, astfel încât acesta să poată remedia problema.
Acest exemplu expune atât un punct forte, cât și un punct slab al sistemului R de pachete contribuite: CRAN acceptă acest tip de testare automată a pachetelor contribuite, dar pachetele contribuite la CRAN nu trebuie să specifice versiunile altor pachete contribuite pe care le utilizează. Există proceduri pentru solicitarea unor versiuni specifice ale pachetelor, dar contribuitorii ar putea să nu utilizeze aceste proceduri.
Dincolo de acestea, un depozit precum CRAN, care efectuează verificări regulate ale pachetelor contribuite, oferă de fapt o suită extinsă de teste, chiar dacă ad-hoc, pentru versiunile de dezvoltare ale limbajului de bază. Dacă Sally (în exemplul de mai sus) primește un mesaj de eroare pe care nu îl înțelege sau îl consideră nepotrivit, în special de la o versiune de dezvoltare a limbajului, ea poate (și adesea o face cu R) să ceară ajutorul echipei de dezvoltare a limbajului respectiv. În acest fel, depozitul poate contribui la îmbunătățirea calității software-ului limbajului de bază.
| Limbaj | Procesul de dezvoltare al pachetelor | Repozitoriu | Metode de instalare | Platformă de dezvoltare colaborativă | Autoverificări |
|---|---|---|---|---|---|
| Haskell | Common Architecture for Building Applications and Libraries[2] | Hackage | cabal (software) | ||
| Java | Maven[3] | ||||
| Julia[4] | |||||
| Common Lisp | Quicklisp[5] | ||||
| .NET | NuGet | NuGet[6] | dotnet add package <package> | ||
| Node.js | node | npm,[7] yarn, bower | npm install <package>
yarn add <package> bower install <package> |
||
| Perl | CPAN | PPM[8] | ActiveState | ||
| PHP | PEAR, Composer | PECL, Packagist | composer require <package>
pear install <package> |
||
| Python | Setuptools, Poetry[9] | PyPI | pip, EasyInstall, PyPM, Anaconda | ||
| R | R CMD check process[10][11] | CRAN[12] | install.packages[13] remotes[14] |
GitHub[15] | De obicei pe 12 platforme sau combinații de versiuni diferite de R (devel, prerel, patched, release) pe diferite sisteme de operare (Linux, Windows, macOS, și Solaris). |
| Ruby | RubyGems | RubyGems[16] | RubyGems,[16] Bundler[17] | ||
| Rust | Cargo[18] | crates.io[19] | Cargo[18] | ||
| Go | go | pkg.go.dev | go get <package> | GitHub[15] | |
| Dart | Flutter | pub.dev | flutter pub get <package> | ||
| D | DUB | dlang.org | dub add <package> | ||
| TeX, LaTeX | CTAN |
Manageri de pachete
[modificare | modificare sursă]Managerii de pachete ajută la gestionarea depozitelor și a distribuției acestora. Dacă un depozit este actualizat, un manager de pachete va permite de obicei utilizatorului să actualizeze acel depozit prin intermediul managerului de pachete. De asemenea, aceștia ajută la gestionarea unor aspecte precum dependențele dintre alte depozite software. Câteva exemple de manageri de pachete includ:
| Manager de pachete | Descriere |
|---|---|
| npm | Un manager de pachete pentru Node.js[20] |
| pip | Un program de instalare a pachetelor pentru Python[21] |
| apt | Pentru gestionarea pachetelor Debian[22] |
| Homebrew | Un program de instalare pentru MacOS care permite instalarea de pachete pe care Apple nu le-a instalat[23] |
| vcpkg | Un manager de pachete pentru C și C++[24][25] |
| yum și dnf | Manager de pachete pentru Fedora și Red Hat Enterprise Linux[26] |
| Pacman | Manager de pachete pentru Arch Linux[27] |
Note
[modificare | modificare sursă]- ^ itmWEB: Coping with Computer Viruses Arhivat în , la Wayback Machine.
- ^ „The Haskell Cabal | Overview”. www.haskell.org. Arhivat din original la . Accesat în .
- ^ „Maven – Welcome to Apache Maven”. maven.apache.org. Arhivat din original la . Accesat în .
- ^ „Julia Package Listing”. pkg.julialang.org. Arhivat din original la . Accesat în .
- ^ „Quicklisp beta”. www.quicklisp.org. Arhivat din original la . Accesat în .
- ^ karann-msft. „NuGet Package Manager UI Reference”. docs.microsoft.com (în engleză). Arhivat din original la . Accesat în .
- ^ „npm”. www.npmjs.com. Arhivat din original la . Accesat în .
- ^ „Installing Perl Modules - www.cpan.org”. www.cpan.org. Arhivat din original la . Accesat în .
- ^ „Poetry”. python-poetry.org. Arhivat din original la . Accesat în .
- ^ Leisch, Friedrich. „Creating R Packages: A Tutorial” (PDF). Arhivat din original (PDF) la . Accesat în .
- ^ Graves, Spencer B.; Dorai-Raj, Sundar. „Creating R Packages, Using CRAN, R-Forge, And Local R Archive Networks And Subversion (SVN) Repositories” (PDF). Arhivat din original (PDF) la . Accesat în .
- ^ „The Comprehensive R Archive Network”. cran.r-project.org. Arhivat din original la . Accesat în .
- ^ „R Installation and Administration”. cran.r-project.org. Arhivat din original la . Accesat în .
- ^ Wickham, Hadley; Bryan, Jenny. „Package structure and state”. R Packages. O'Reilly. Accesat în .
- ^ a b Decan, Alexandre; Mens, Tom; Claes, Maelick; Grosjean, Philippe (). „On the Development and Distribution of R Packages: An Empirical Analysis of the R Ecosystem”. Proceedings of the 2015 European Conference on Software Architecture Workshops. pp. 1–6. doi:10.1145/2797433.2797476. ISBN 9781450333931. Accesat în .
- ^ a b „RubyGems.org your community gem host”. rubygems. Arhivat din original la . Accesat în .
- ^ „Bundler: The best way to manage a Ruby application's gems”. bundler.io. Arhivat din original la . Accesat în .
- ^ a b „The Cargo Book”. Rust Programming Language. Arhivat din original la . Accesat în .
- ^ „Rust Package Registry”. crates.io. Arhivat din original la . Accesat în .
- ^ „npm About”. www.npmjs.com. Arhivat din original la . Accesat în .
- ^ developers, The pip, pip: The PyPA recommended tool for installing Python packages., arhivat din original la , accesat în
- ^ „Apt - Debian Wiki”. wiki.debian.org. Arhivat din original la . Accesat în .
- ^ „Homebrew”. Homebrew (în engleză). Arhivat din original la . Accesat în .
- ^ „Yelp launches Yelp Fusion, Microsoft creates Vcpkg tool, and the new Touch Sense SDK for Android developers”. SD Times. . Arhivat din original la . Accesat în .
- ^ „Microsoft's C++ library manager now available for Linux and macOS”. SD Times. . Arhivat din original la . Accesat în .
- ^ Chinthaguntla, Keerthi (). „Linux package management with YUM and RPM”. Enable Sysadmin (în engleză). Arhivat din original la . Accesat în .
- ^ „pacman - ArchWiki”. wiki.archlinux.org. Arhivat din original la . Accesat în .