# Backends **Backends** are the execution targets for [[qiskit-quantum-circuits|quantum circuits]]. A backend can be a classical [[qiskit-simulators|simulator]] or a real quantum processor. Qiskit abstracts the details: you design once, then run on different backends without changing code. Each backend has constraints: a gate set (which gates it natively supports), qubit connectivity (which pairs can interact), and error rates. [[qiskit-transpilation|Transpilation]] adapts your circuit to meet these constraints. ## Backend Selection Qiskit provides several built-in backends: - **AerSimulator**: fast classical simulator, supports arbitrary gate sets, perfect fidelity - **QasmSimulator**: OpenQASM 2.0 simulator - **StatevectorSimulator**: tracks the full quantum state (for small circuits) - **IBM backends**: real quantum processors via IBM Quantum Platform ```python from qiskit_aer import AerSimulator, QasmSimulator from qiskit_ibm_runtime import QiskitRuntimeService # Local simulators sim = AerSimulator() result = sim.run(qc, shots=1000).result() # IBM Quantum hardware (requires account and token) service = QiskitRuntimeService() backend = service.backend('ibmq_qx5') job = backend.run(qc, shots=1000) result = job.result() ``` ## Backend Properties Query a backend's properties: qubit count, gate times, error rates, connectivity: ```python backend = AerSimulator() print(backend.num_qubits) print(backend.configuration().basis_gates) ``` Different backends have different performance characteristics. Simulators are perfect but slow for large circuits; real hardware is noisy but available now.