> [!note] Disclaimer > This note has been replaced by a more detailed blog post, [Identity in software design](https://adrianodigiovanni.com/identity-in-software-design/). The post offers expanded insights and examples on the concepts mentioned here. For the latest information, please check the blog. Software designers tackle the challenge of [[Identity over time]] by defining software entity identities based on specific criteria, frequently asking: *a* is the same *what* as *b*? ([[References#^8d3ca6|Gallois, 2016]]) Identity in software can be considered as [[Relative Identity (RI)]], where *what* is referred to as the [[Sortal]]. ![[Relative Identity (RI)#^9f8cf6]] ![[Sortal#^3872f6]] Both [[Relative Identity (RI)]] and [[Sortal]] are concepts within philosophical discussions on [[Identity theory]]. ![[Sortal#^678a53]] In software design, sortals can be considered a subset of types having specific behavior related to identification and quantification. For example: - **Reference types** are identified by their memory address ([[Reference equality]]. - **Value types** are identified by their content ([[Value equality]]). - **Entity types** are identified by a unique identifier ([[Value equality]] with respect to the unique identifier). - **Interfaces, protocols, and contracts** are identified by their behavior. - **Version types** are identified by unique identifiers like version numbers or timestamps ([[Value equality]]). In [[Domain-Driven Design (DDD)]], both [[Entity|Entities]] and [[Value Object|Value Objects]] are sortals. In summary, any type that incorporates such identification or quantification behavior can be classified as a sortal.