Botswana: a lone executioner in Southern Africa

Credit: breakermaximus / iStock

Seventeen men languish on death row in Botswana, waiting for the president to decide whether they live or die. Each week that passes without word from President Duma Gideon Boko—a human rights lawyer who once opposed the death penalty—deepens their uncertainty. Botswana still carries out executions by hanging. Will the country’s new leaders finally end this brutal and archaic practice, or will they uphold the region’s last surviving ritual of state killing?

Botswana is a regional outlier

Since attaining independence from Great Britain in 1966, Botswana has enjoyed the longest streak of multiparty democracy and unbroken democratic governance on the continent, and commentators celebrate the Southern African nation for its respect for political pluralism, participation, and human rights. However, Botswana defies the conventional narrative that links democratic progress, economic growth, and political transparency with the abolition of the death penalty. 

Botswana remains the sole outlier in a region that has largely turned its back on capital punishment. Countries like Angola, Mozambique, Namibia, and South Africa decisively abolished capital punishment in the last quarter of the 20th century, and Eswatini and Lesotho quietly stepped away from the practice, becoming abolitionist in practice. Botswana, however, remains a hardline retentionist, a defiant outlier, and the region's last executioner.

Will a new regime bring change?

 

Now, all eyes are on President Boko. In the historic November 2024 elections, Boko’s Umbrella for Democratic Change democratically unseated the Botswana Democratic Party from its 58-year grip on power. Boko has long opposed the death penalty, and he now holds the power of life and death. The dramatic reversal of Passmore Moyo’s death sentence earlier this year underscored capital punishment’s controversy and tenuous place in Botswana’s justice system. His case, initially described as a crime of passion rather than premeditated murder, exposed the troubling reality that not all those sentenced to death in Botswana fit the stereotype of the “worst of the worst.” 

The question gripping the nation is simple but profound: Will President Boko act in line with his long-held principles and halt the killings, or will he uphold Botswana’s legacy as the only Southern African country still carrying out executions?

Defying global consensus

Botswana is a party to core human rights treaties, such as the International Covenant on Civil and Political Rights (ICCPR) and the African Charter on Human and Peoples’ Rights (ACHPR). Yet it has not joined the instruments explicitly aimed at abolishing capital punishment. Notably, it has not ratified the Second Optional Protocol to the ICCPR, which commits states to abolishing the death penalty. Nor has it aligned with ACHPR Resolution 416, which reaffirms the necessity of abolishing the death penalty throughout Africa. In fact, since 2007, Botswana has repeatedly voted against a United Nations General Assembly resolution that calls for a global moratorium on executions. It has done so ten times, most recently in December 2024. 

Public support, political silence

A recent survey conducted by Afrobarometer revealed overwhelming public support for the death penalty in Botswana. The study found that 82% of respondents favor retaining the death penalty for serious crimes like murder. Successive governments inheriting the long-running policy of execution have sustained the practice of capital punishment. They have treated the policy as untouchable, defying global norms and brushing off reform. Since 1966, Botswana has executed 48 prisoners. These hangings were conducted without prior notice, and families of convicted individuals were informed only after the executions had taken place. 

Supporters of capital punishment in Botswana have successfully branded it as a legitimate deterrent to murder. However, studies have debunked this notion, demonstrating that execution is not a more effective deterrent than imprisonment.

The death penalty was not up for debate under former president Ian Khama. He had no plans “to either abolish . . . or impose a moratorium” on the state’s blunt tool to combat the growing murder rate in the country. But Botswana’s murder rates have consistently fluctuated between approximately 14 and 17 per 100,000, well above the regional average of 10.6 per 100,000. Such figures undercut the argument that capital punishment serves as a strong deterrent. Khama’s successor, Mokgweetsi Masisi, never openly declared his stance. Instead, he deflected the question and passed responsibility to the people, claiming that a decision on the abolition of the death penalty could only come through a looming constitutional review. But he made his position unmistakably clear by overseeing six executions in just 26 months, outpacing every leader before him.

Boko’s test of principles

The people of Botswana elected Boko on a wave of hope. He promised constitutional reform, inclusive governance, and respect for human rights. Yet, since taking office, he has remained conspicuously silent on capital punishment. While civil society organizations have renewed their calls for a moratorium and international human rights mechanisms, including the UN Committee against Torture, have sharply criticized Botswana’s death penalty practices, Boko’s administration has taken no formal steps toward their abolition.

However, unlike his predecessor, Boko has so far refrained from authorizing any executions. Whether this signals a profound commitment to reform or temporary indecision remains to be seen. Either way, the continued existence of the death penalty raises uncomfortable questions about whether this new era of governance will finally break with the punitive structures of the past. Official silence compounds this uncertainty. Unfortunately, the combination of constitutional shielding, popular support, and executive inaction makes abolishing the death penalty highly unlikely, though not entirely impossible, in the near term.

A nation at the crossroads

Botswana stands at a moral and political crossroads. For decades, it has presented itself as a democratic beacon while quietly preserving the state’s right to take a life, one of the most authoritarian powers imaginable. This authority, rooted in colonial law and sustained by political caution, violates the most basic human right: the right to life itself. Botswana’s continued embrace of capital punishment thus jars sharply with its image as Africa’s model democracy.

It is no longer possible to ignore Botswana’s regional isolation on this issue as it clings to a colonial-era penalty that its neighbors have denounced as inhumane and ineffective. With 17 lives hanging in the balance, the question is no longer whether Botswana can afford to change but whether it can afford not to. Whether President Boko abolishes capital punishment or not will define his presidency and the nation’s moral legacy for generations to come.

Error Occurred While Processing Request The web site you are accessing has experienced an unexpected error.
Please contact the website administrator.


The following information is meant for the website developer for debugging purposes.
Error Occurred While Processing Request

Error Executing Database Query.

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') order by start_date desc limit 4' at line 11
 
The error occurred in C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 3033
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 3013
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 3011
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 2353
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 1597
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 1393
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 1
Called from C:/websites/openglobalrights.com/wwwroot/index.cfm: line 11
Called from C:/websites/openglobalrights.com/wwwroot/index.cfm: line 1
Called from C:/websites/openglobalrights.com/wwwroot/botswana-a-lone-executioner-in-southern-africa/index.cfm: line 1
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 3033
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 3013
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 3011
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 2353
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 1597
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 1393
Called from C:/websites/openglobalrights.com/wwwroot/single/index.cfm: line 1
Called from C:/websites/openglobalrights.com/wwwroot/index.cfm: line 11
Called from C:/websites/openglobalrights.com/wwwroot/index.cfm: line 1
Called from C:/websites/openglobalrights.com/wwwroot/botswana-a-lone-executioner-in-southern-africa/index.cfm: line 1
3031 : <cfelseif get_related_content.recordcount eq 4>limit 0
3032 : <cfelseif get_related_content.recordcount eq 5>limit 0
3033 : <cfelseif get_related_content.recordcount gt 5>limit 0
3034 : <cfelse></cfif>
3035 : </cfquery>

SQLSTATE   42000
DATASOURCE   openglobalrights_utf
VENDORERRORCODE   1064
SQL    select distinct(c.id), c.url as c_url, c.language_id, c.page, c.start_date, c.page_title, author.name as author_name, author.url as author_url, a1.name as coauthor1_name, a1.url as coauthor1_url, a2.name as coauthor2_name, a2.url as coauthor2_url, a3.name as coauthor3_name, a3.url as coauthor3_url from content_topic ct, content c inner join author on c.author_id = author.id left join author a1 on c.coauthor1_id = a1.id left join author a2 on c.coauthor2_id = a2.id left join author a3 on c.coauthor3_id = a3.id where language_id = 1 and c.start_date <{ts '2026-06-23 00:00:00'} and c.id != 5741 and c.id = ct.content_id and author_id > 1 and ct.topic_id in () order by start_date desc limit 4
Resources:

Browser   Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
Remote Address   216.73.216.39
Referrer  
Date/Time   23-Jun-26 02:08 PM
Stack Trace
at cfindex2ecfm1127481234._factor49(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:3033) at cfindex2ecfm1127481234._factor50(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:3013) at cfindex2ecfm1127481234._factor53(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:3011) at cfindex2ecfm1127481234._factor55(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:2353) at cfindex2ecfm1127481234._factor56(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:1597) at cfindex2ecfm1127481234._factor74(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:1393) at cfindex2ecfm1127481234.runPage(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:1) at cfindex2ecfm389513140._factor31(C:/websites/openglobalrights.com/wwwroot/index.cfm:11) at cfindex2ecfm389513140.runPage(C:/websites/openglobalrights.com/wwwroot/index.cfm:1) at cfindex2ecfm33666815.runPage(C:/websites/openglobalrights.com/wwwroot/botswana-a-lone-executioner-in-southern-africa/index.cfm:1) at cfindex2ecfm1127481234._factor49(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:3033) at cfindex2ecfm1127481234._factor50(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:3013) at cfindex2ecfm1127481234._factor53(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:3011) at cfindex2ecfm1127481234._factor55(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:2353) at cfindex2ecfm1127481234._factor56(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:1597) at cfindex2ecfm1127481234._factor74(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:1393) at cfindex2ecfm1127481234.runPage(C:/websites/openglobalrights.com/wwwroot/single/index.cfm:1) at cfindex2ecfm389513140._factor31(C:/websites/openglobalrights.com/wwwroot/index.cfm:11) at cfindex2ecfm389513140.runPage(C:/websites/openglobalrights.com/wwwroot/index.cfm:1) at cfindex2ecfm33666815.runPage(C:/websites/openglobalrights.com/wwwroot/botswana-a-lone-executioner-in-southern-africa/index.cfm:1)

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')
order by start_date desc
limit 4' at line 11
	at sun.reflect.GeneratedConstructorAccessor1000.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:395)
	at com.mysql.jdbc.Util.getInstance(Util.java:370)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1038)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4187)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4119)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2793)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2742)
	at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:878)
	at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:986)
	at coldfusion.server.j2ee.sql.JRunStatement.execute(JRunStatement.java:359)
	at coldfusion.sql.Executive.executeQuery(Executive.java:1451)
	at coldfusion.sql.Executive.executeQuery(Executive.java:1201)
	at coldfusion.sql.Executive.executeQuery(Executive.java:1131)
	at coldfusion.sql.SqlImpl.execute(SqlImpl.java:406)
	at coldfusion.tagext.sql.QueryTag.executeQuery(QueryTag.java:1059)
	at coldfusion.tagext.sql.QueryTag.doEndTag(QueryTag.java:688)
	at cfindex2ecfm1127481234._factor49(C:\websites\openglobalrights.com\wwwroot\single\index.cfm:3033)
	at cfindex2ecfm1127481234._factor50(C:\websites\openglobalrights.com\wwwroot\single\index.cfm:3013)
	at cfindex2ecfm1127481234._factor53(C:\websites\openglobalrights.com\wwwroot\single\index.cfm:3011)
	at cfindex2ecfm1127481234._factor55(C:\websites\openglobalrights.com\wwwroot\single\index.cfm:2353)
	at cfindex2ecfm1127481234._factor56(C:\websites\openglobalrights.com\wwwroot\single\index.cfm:1597)
	at cfindex2ecfm1127481234._factor74(C:\websites\openglobalrights.com\wwwroot\single\index.cfm:1393)
	at cfindex2ecfm1127481234.runPage(C:\websites\openglobalrights.com\wwwroot\single\index.cfm:1)
	at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:244)
	at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:446)
	at coldfusion.runtime.CfJspPage._emptyTcfTag(CfJspPage.java:2795)
	at cfindex2ecfm389513140._factor31(C:\websites\openglobalrights.com\wwwroot\index.cfm:11)
	at cfindex2ecfm389513140.runPage(C:\websites\openglobalrights.com\wwwroot\index.cfm:1)
	at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:244)
	at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:446)
	at coldfusion.runtime.CfJspPage._emptyTcfTag(CfJspPage.java:2795)
	at cfindex2ecfm33666815.runPage(C:\websites\openglobalrights.com\wwwroot\botswana-a-lone-executioner-in-southern-africa\index.cfm:1)
	at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:244)
	at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:446)
	at coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65)
	at coldfusion.filter.IpFilter.invoke(IpFilter.java:64)
	at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:451)
	at coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:48)
	at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40)
	at coldfusion.filter.PathFilter.invoke(PathFilter.java:112)
	at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:94)
	at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28)
	at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38)
	at coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:58)
	at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38)
	at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)
	at coldfusion.filter.CachingFilter.invoke(CachingFilter.java:62)
	at coldfusion.CfmServlet.service(CfmServlet.java:219)
	at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42)
	at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:466)
	at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:197)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)