Backends are the execution targets for quantum circuits. A backend can be a classical 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. Transpilation adapts your circuit to meet these constraints.
Qiskit provides several built-in backends:
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()
Query a backend's properties: qubit count, gate times, error rates, connectivity:
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.