# Source Code Acquisition
## About OpenHarmony
OpenHarmony is an open-source version of HarmonyOS. It is donated by Huawei to OpenAtom Foundation. The first open-source version can run on 128 KB to 128 MB devices. You are welcomed to join the open-source community for continuous improvement.
Access code repositories at [https://openharmony.gitee.com](https://openharmony.gitee.com).
## Overview of Source Code Acquisition
This document describes how to acquire OpenHarmony source code and provides its directory structure. The OpenHarmony code is open to you as [bundles](../bundles/overview-0.md), which can be obtained in any of the following ways:
- **Method 1 \(recommended\)**: Download compressed files from an image site.
- **Method 2**: Visit the HarmonyOS Package Manager \([HPM](https://hpm.harmonyos.com/#/en/home)\) platform, search for your desired solution, select or exclude bundles from the solution, and download it.
- **Method 3**: Use an hpm-cli tool available on the [HPM](https://hpm.harmonyos.com/#/en/home) platform, and run related HPM commands to download your desired code.
- **Method 4**: Use the **repo** or **git** tool to download your desired code from the code repository.
## Method 1: Acquiring Source Code from Image Sites
You can download the source code or the corresponding solutions from the image library at the sites listed below.
**Table 1** Acquiring source code from image sites
## Method 2: Acquiring Source Code from the Bundle-specific HPM
## When to Use
If OpenHarmony is new to you, sample solutions are helpful to your development. The [HPM](https://hpm.harmonyos.com/#/en/home) platform provides a recommended solution. You can add or exclude bundles to quickly customize your system.
## How to Use
1. Search for a proper solution.
1. Access the [HPM](https://hpm.harmonyos.com/#/en/home) page, and click the **Solution** tab, as shown in the following figure.
2. Enter a keyword \("camera" as an example\) in the search box. All matched solutions are found.
3. Specify filter criteria, such as the bundle type \(example: **Board support** and **Kernel support**\), to further filter the solutions.
4. Click the solution you need to view its details.
**Figure 1** HPM page

2. Customize the solution.
1. Read the information under **Readme** to learn about the solution \(application scenarios, features, usage, and customization\), as shown in the following figure.
2. Click **Download** to download the solution to your local PC.
3. Click **Log in to custom** to customize the bundles for the solution.
**Figure 2** Solution example

3. Customize bundles.
1. Access the **Custom solution** page, as shown in the following figure.
2. Set the toggle switch next to a specific optional bundle to exclude it from the solution, or click **Add bundle** to add new bundles.
3. Enter the basic information about your project, including the bundle name, version, and description, on the right pane.
4. Click **Download**. The system then generates the OpenHarmony code structure file \(for example, **name.zip**\) and saves it to your local PC.
- The downloaded compressed package does not contain the original file of source code. You can import the package to the IDE, decompress it, and run the **hpm install** command to download all required bundles.
- The downloaded bundles are stored in the **ohos\_bundles** folder in the project directory.
**Figure 3** Customizing bundles

## Method 3: Acquiring Source Code with a hpm-cli Tool
## When to Use
- You have obtained bundle-specific source code from the HPM website, and want to independently upgrade one or more bundles in the source code.
- You are familiar with OpenHarmony development and **hpm-cli** tools.
## Preparations
You need to install the **Node.js** and hpm-cli tool as follows:
1. Install **Node.js**.
Download **Node.js** from its official website and install it on your local PC.
You are advised to install [Node.js](https://nodejs.org/) 12.x \(including npm 6.14.4\) or a later version \(12.13.0 or later is recommended\).
2. Install the hpm-cli tool using **npm** delivered with **Node.js**.
Open the CMD window and run the following command:
```
npm install -g @ohos/hpm-cli
```
3. Run the following command to check whether the installation is successful. If the HPM version is displayed, the installation is successful.
```
hpm -V or hpm --version
```
4. Run the following command to upgrade the HPM version:
```
npm update -g @ohos/hpm-cli
```
## Operations
Add the bundle \(**@ohos/demo** as an example\) to your project as follows:
1. Go to the development directory and run the following command to create a development project using the default template:
```
hpm init -t default
```
2. Run the following command to install the bundle \(**@ohos/demo** as an example\):
```
hpm install @ohos/demo
```
3. Verify that the **hpm-cli** tool automatically downloads all dependent bundles from the server. If the download is successful, the message "Install successfully!" is displayed.
```
$ hpm install @ohos/demo
Requesting: https://url.foo.bar/hpm/registry/api/bundles/@ohos/demo
downloading @ohos/demo
Requesting: https://lfcontentcenterdev....../bMAlLrYISLqdUTFFFCdgzA.tgz
extract D:\demo\ohos_bundles\@ohos\demo\@ohos-demo-1.0.7.tgz
Install successfully!
```
## Method 4: Acquiring Source Code from a Code Repository
## When to Use
- You want to establish a baseline based on stable OpenHarmony releases and distribute the baseline to your customers.
- You have interconnected your software with OpenHarmony and need official certification from OpenHarmony.
- You want to contribute code to the OpenHarmony ecosystem after chips, modules, and applications are certified by OpenHarmony.
- You need to address OpenHarmony issues.
- You want to learn OpenHarmony source code.
## Preparations
1. Register your account with gitee.
2. Register an SSH public key.
3. Install the git client and configure basic information.
```
git config --global user.name "yourname"
git config --global user.email "your-email-address"
git config --global credential.helper store
```
4. Run the following commands to install the **repo** tool:
```
curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo
chmod a+x /usr/local/bin/repo
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
```
## Operations
Method 1 \(recommended\): Use the **repo** tool to download source code.
```
repo init -u https://gitee.com/openharmony/manifest.git -b master
repo sync -c
```
Method 2: Run the **git clone** command to clone a single code repository.
Go to https://gitee.com/openharmony, select the code repository to be cloned, and run the following command:
```
git clone https://gitee.com/openharmony/manifest.git -b master
```
## Source Code Directories
The following table describes the OpenHarmony source code directories.
**Table 2** Directory description
Name
|
Description
|
applications
|
Application samples, including wifi-iot and ip-camera
|
base
|
Basic software service subsystem set and hardware service subsystem set
|
build
|
Bundle-based compilation, building, and configuration scripts
|
domains
|
Enhanced software service subsystem set
|
drivers
|
Driver subsystem
|
foundation
|
Basic system capability subsystem set
|
kernel
|
Kernel subsystem
|
prebuilts
|
Compiler and tool chain subsystem
|
test
|
Testing subsystem
|
third_party
|
Open-source third-party software
|
utils
|
Commonly used development tools
|
vendor
|
Vendor-provided software
|
build.py
|
Compilation script file
|