ノード間の接続情報を管理するプログラムを「マスタ」と呼び、登録されたノードが他のノードから見えるようにする役割を担う。コアユーティリティに含まれるプログラム「roscore」を実行することでマスタが起動される。各ノードの起動時に、ノード名やURI、ポート番号といった通信に必要な情報がマスタに登録される。マスタはノードから要求があった際に相手先ノードの情報を返し、それを元にノードは相手先ノードとピア・ツー・ピア接続を確立する。ROSシステムを実行するためには、ROSネットワークを構築する何れかのホストでマスタを必ず1つ起動しておく必要がある。マスタは1つのROSネットワークを構築・管理し、同一のROSネットワーク内で複数のroscoreは起動できない。マスタが異なるネットワーク間でノード接続を行う場合は別途通信の仕組みを構築する必要がある。
ロボットは、センサやユーザインタフェース等から入力した情報を処理して目的遂行のために必要な各種計算を行い、駆動系を制御する。ROSはこれらの演算を「ノード」と呼ばれる比較的小さなプログラムに細分化して実装する。ノードは実行可能な1つのプログラムであり、ROSにおける処理機能の基本単位である。センサドライバ、障害物回避、モータの駆動、ナビゲーションといった目的ごとにノードを作成する。各ノードは独立して並列的に動作し、同一ホスト上で全てを実行することも、複数のホストに分散して実行することも可能である。
ROSはソフトウェアの再利用性を高めるため、分散システムとして設計されている。ノードと呼ばれるプロセスが処理結果を送受信しあいながら、ROSは1つの大きなソフトウェアシステムとして動作する。ROSのプロセスは、ピア・ツー・ピア型のネットワーク（以下、「ROSネットワーク」と呼ぶ）を構成し、ROSネットワークは計算グラフとして表現できる。
新規に自作したパッケージや、既存のパッケージの改良・修正を行なった場合、リポジトリにコミットしてリリースすることも可能である。ROSはリリースのためのツール「bloom」を提供しており、その使い方を含めたリリース手順は ROS Wiki で説明されている。
ソースコードから目的のコードを生成（ビルド）するため、ROSはビルドシステムを有する。初期のビルドシステムは「rosbuild」と呼ばれるものであったが、のちに「catkin」と名付けられた新システムが開発された。ディストリビューション「Groovy Galapagos」からcatkinへの切り替えが始まり、「Hydro Medusa」以降は全システムがcatkinに対応した。catkinはCMakeを修正・拡張したもので、パッケージのビルド、パッケージ管理、依存関係パッケージの自動インストールなどが行える。catkin はビルド結果をソースコードと異なるディレクトリに保存するアウトソースビルド方式を採用し、パッケージの再配布やクロスコンパイルをサポートしたことでソフトウェアの移植性が向上した。「catkin」という名前は、開発したウィローガレージ社のウィロー（Willow = ヤナギ）の木にみられる尾状花序 (英: catkin) に由来する。
既存のパッケージにないハードウェアやアルゴリズムなどを実装するためには、自分でパッケージを作成する。ROSは複数のプログラミング言語に対応している。主要言語はC++やPythonで、そのほかにLisp、Java、Lua、Ruby、Octaveなどでプログラムを開発することができる。
ROSのファイルシステムは、インストールフォルダとユーザ作業フォルダに分けられる。インストールフォルダには、ROSの中核プログラムである「roscore」を含むコアユーティリティや、ロボット関連ライブラリ、可視化やシミュレーションのための開発支援ツールなどがインストールされる。ユーザ作業フォルダは、ダウンロードしたパッケージやユーザが自作したパッケージを保存して編集したり、実行可能な形式にビルドしたりする作業スペースである。ユーザが利用したい機能に応じて必要なパッケージやツールを追加インストールする。パッケージは、パッケージ管理ツールを利用してインストールするか、リポジトリからソースコードを取得してビルドする。ROSは分散システムとして設計されており、複数のホスト（コンピュータ）に分散してパッケージをインストールすることも可能である。
ROSのアプリケーションプログラムは「パッケージ」と呼ばれる基本単位で管理される。パッケージは、ROSソフトウェアの基本単位であり、最小実行単位である「ノード」（#計算グラフ上の仕組み参照）を1つ以上持つか、他のパッケージのノードを実行するための設定ファイルを含む。各パッケージにはパッケージ情報の管理ファイル、ビルドで用いる設定ファイル、ノードのソースコード、ノード間通信のための設定ファイルなどが含まれる。共通の目的のもと複数のパッケージをグループ化した「メタパッケージ」と呼ばれるものもある。ROSのパッケージは公式なものだけでも2,000以上ある。ロボット本体の制御に関するパッケージ、センサに関するパッケージ、駆動部のためのモータ制御に関するパッケージなどがある。センサパッケージはカメラ、深度カメラ、レーザ距離センサ、力／トルクセンサ、音声認識、RFIDなど様々なデバイスに対応したものが公開されている。
ROSは多種多様のパッケージやツールが複合したソフトウェアシステムである。各プログラミング言語に対応する「クライアント層」、具体的なアプリケーションを実装した 「ロボットアプリケーション層」、個別のアプロケーションプログラム作成のための「アプリケーションフレームワーク」、通信を担う「コミュニケーション層」、ハードウェア制御のための「ハードウェアインタフェース層」、開発を支援する「ソフトウェア開発ツール」、そして「シミューレータ」で構成される。
文禄5年（1596年）10月に土佐国にスペイン船が漂着し、サン＝フェリペ号事件が起きる。奉行・増田長盛らは船員たちに「スペイン人たちは海賊であり、ペルー、メキシコ（ノビスパニア）、フィリピンを武力制圧したように日本でもそれを行うため、測量に来たに違いない。このことは都にいる三名のポルトガル人ほか数名に聞いた」という秀吉の書状を告げた。同年12月8日に秀吉は再び禁教令を公布した。翌慶長2年（1597年）、秀吉は朝鮮半島への再出兵と同時期に、イエズス会の後に来日したフランシスコ会（アルカンタラ派）の活発な宣教活動が禁教令に対して挑発的であると考え、京都奉行の石田三成に命じて、京都と大坂に住むフランシスコ会員とキリスト教徒全員を捕縛し処刑を命じた。三成はパウロ三木を含むイエズス会関係者を除外しようとしたが、果たせなかった。2月5日、日本人20名、スペイン人4名、メキシコ人、ポルトガル人各1名の26人が処刑された。