> For the complete documentation index, see [llms.txt](https://olb.gitbook.io/linux-essentials-certification/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://olb.gitbook.io/linux-essentials-certification/1.linux_community/1.2-open_source_applications.md).

# 1.2 Open Source applications

**Weight 2**\
Key knowledge areas

* Desktop applications
* Server applications
* Development languages
* Package management tools and repositories

Partial list of the used files, terms and utilities

* OpenOffice.org, LibreOffice, Thunderbird, Firefox, GIMP
* Nextcloud, ownCloud
* Apache HTTPD, NGINX, MariaDB, MySQL, NFS, Samba
* C, Java, JavaScript, Perl, shell, Python, PHP
* dpkg, apt-get, rpm, yum

***

## Sofware packages

* Each distro has a package repository
* Package manager
  * `dpkg` `apt` `apt-get` for Debian / Ubuntu / Mint
  * `rpm` `yum` `dnf` for Red Hat, Fedora , CentOS
  * `apt` `apt-get` `yum` `dnf` used for catalogues of packages with dependencies. Use this in practice. Manage packages, dependencies, future update
  * `dpkg` `rpm` operate only on individual package file (no dependencies). No use in practice

## Package Installation

* Search:
  * `apt-cache search package_name` or `apt search package_name`\
    The `apt-cache` command is used to search for packages and to list information about available packages
  * `yum search package_name` or `dnf search package_name`
* Install:
  * `sudo apt-get install package_name` or `sudo apt install package_name`
  * `sudo yum install package_name` or `sudo dnf install package_name`
  * `sudo`: Need to be `root` for installation

## Package removal

* `sudo apt-get remove package_name` or `sudo apt remove package_name` DEB packages
* `sudo yum remove package_name` or `sudo dnf remove package_name` RPM packages
* `sudo`: Need to be `root` for a removal

## Office applications

* Apache Foundation : *Apache OpenOffice* (Apache 2.0)
* Document Foundation : *LibreOffice* (LGPLv3)
* share the same code
* compatible with Microsoft format
* ODF is the open format (`.odt` for writer `.ods` for calc `.odp` for impress)
* Main Libreoffice/OpenOffice applications:
  * **Writer** for text similar to Word
  * **Calc** for spreadsheet similar to Excel
  * **Impress** for presentations similar to PowerPoint
  * **Draw** for vector drawing similar to Visio
  * **Math** for formulas
  * **Base** for database similar to Access

## Web Browsers

* Firefox - Mozilla Organization - Open Source
* Chrome - proprietary based on open source browser : Chromium

## Multimedia

* Blender for 3D animations
* GIMP for image edition (\~ Photoshop)
* Inkscape for vectors (\~ Illustrator)
* Audacity for audio edition
* ImageMagick command tool for image and PDF transformation
* VLC for video

## Server programs

* http server (collect request from client browser and send a response mostly in HTML format through HTTP protocol) )
  * Apache
  * Nginx
  * lighthttpd
* PHP mostly use as server language
* Javascript as client language
* Static pages and Dynamic pages
* Dynamic pages : http server queries a database
* Database server : store large amount of organized information
* Relational database : `MariaDB` `MySQL` `PostgreSQL`

## Data sharing

* Network sharing
  * NFS (*Network File System*) - protocol for Unix/linux machines
  * NFS sometimes used by *thin clients* : OS is booted from distant directory with NFS
  * Samba for Linux / Windows/ other OS. Samba can share printers
* Network Domain
  * Domain controller is the central server used for workstation login
  * Domain controller is managed by Microsoft's Active Directory
  * Linux workstation use authentication system *SSSD* or Samba to be connected to Domain Controller
  * *NextCloud* or *ownCloud* :
    * NextCloud is a fork of ownCloud
    * **file sharing**, **collaborative workspaces**, calendar, contacts, emails
    * NextCloud : video conferencing
    * paid version : extra feature and support
    * run on private server (on premise)

## Network Administration

* for communication between computers
* need routers with network services:
  * DHCP *Dynamic Host Configuration Protocol*
    * Provide automatically an IP to the requesting device
  * DNS *Domain Name System*
    * translate domain name to IP
    * third party DNS : Google, OpenDNS

## Programming Languages

* Language : instructions used to make programs (applications, OS or server programs)
* *source code* in text files is a human friendly description of the program
* computer can't execute directly source code
  * *compiled language* use a compiler to convert source code in binary file executed by computer. Binary is specific to one processor type.
  * *interpreted language* or *scripting language* does not need compilation. An interpreter read source code in real time and execute instruction. Development is easier but execution is slower

### JavaScript

* interpreted
* mostly used in web pages
* client oriented but now also server (node.js) ans mobile device (react native)

### C

* compiled in binary code
* used to build OS (Linux, Unix)
* flexible (work on different platform)

### Java

* compiled in bytecode for JVM
* portable

### Perl

* interpreted
* good to process text content w/ regular expressions

### Shell

* interpreted
* good to automate tasks on command line environment

### Python

* interpreted
* popular , easy to learn, good for scientific needs (dependencies like numpy/ pandas )

### PHP

* interpreted
* good for web dynamic content pages (server side)
* LAMP is very popular for web servers
