docs/metasploit-framework.wiki/Payload-Rename-Justification.md
Many payloads perform the same task, yet have different names. This results in confusion and a bad new-user experience. Specifically, ARCH_CMD payloads differ greatly from their shellcode-derived brethren. For example, the most heavily used payload is windows/meterpreter/reverse_tcp; the equivalent in ARCH_CMD land is cmd/unix/reverse, which gives no indication that the session type will be a shell.
I propose we rename all the aberrantly-named payloads to match the convention. Specifically:
cmd/unix/bind_awk -> cmd/unix/shell_bind_tcp_awkcmd/unix/bind_lua -> cmd/unix/shell_bind_tcp_luacmd/unix/bind_netcat -> cmd/unix/shell_bind_tcp_netcatcmd/unix/bind_netcat_gaping -> cmd/unix/shell_bind_tcp_netcat_gapingcmd/unix/bind_netcat_gaping_ipv6 -> cmd/unix/shell_bind_tcp_netcat_gaping_ipv6cmd/unix/bind_nodejs -> cmd/unix/shell_bind_tcp_nodejscmd/unix/bind_perl -> cmd/unix/shell_bind_tcp_perlcmd/unix/bind_perl_ipv6 -> cmd/unix/shell_bind_tcp_perl_ipv6cmd/unix/bind_ruby -> cmd/unix/shell_bind_tcp_rubycmd/unix/bind_ruby_ipv6 -> cmd/unix/shell_bind_tcp_ruby_ipv6cmd/unix/bind_zsh -> cmd/unix/shell_bind_tcp_zshcmd/unix/generic -> cmd/unix/execcmd/unix/reverse -> cmd/unix/shell_reverse_tcp_telnetcmd/unix/reverse_awk -> cmd/unix/shell_reverse_tcp_awkcmd/unix/reverse_bash -> cmd/unix/shell_reverse_tcp_bashcmd/unix/reverse_bash_telnet_ssl -> cmd/unix/shell_reverse_tcp_bash_telnet_sslcmd/unix/reverse_lua -> cmd/unix/shell_reverse_tcp_luacmd/unix/reverse_netcat -> cmd/unix/shell_reverse_tcp_netcatcmd/unix/reverse_netcat_gaping -> cmd/unix/shell_reverse_tcp_netcat_gapingcmd/unix/reverse_nodejs -> cmd/unix/shell_reverse_tcp_nodejscmd/unix/reverse_openssl -> cmd/unix/shell_reverse_tcp_opensslcmd/unix/reverse_perl -> cmd/unix/shell_reverse_tcp_perlcmd/unix/reverse_perl_ssl -> cmd/unix/shell_reverse_tcp_perl_sslcmd/unix/reverse_php_ssl -> cmd/unix/shell_reverse_tcp_php_sslcmd/unix/reverse_python -> cmd/unix/shell_reverse_tcp_pythoncmd/unix/reverse_python_ssl -> cmd/unix/shell_reverse_tcp_python_sslcmd/unix/reverse_ruby -> cmd/unix/shell_reverse_tcp_rubycmd/unix/reverse_ruby_ssl -> cmd/unix/shell_reverse_tcp_ruby_sslcmd/unix/reverse_ssl_double_telnet -> cmd/unix/shell_reverse_tcp_ssl_double_telnetcmd/unix/reverse_zsh -> cmd/unix/shell_reverse_tcp_zshcmd/windows/bind_lua -> cmd/windows/shell_bind_tcp_luacmd/windows/bind_perl -> cmd/windows/shell_bind_tcp_perlcmd/windows/bind_perl_ipv6 -> cmd/windows/shell_bind_tcp_perl_ipv6cmd/windows/bind_ruby -> cmd/windows/shell_bind_tcp_rubycmd/windows/download_eval_vbs -> cmd/windows/download_eval_vbscmd/windows/download_exec_vbs -> cmd/windows/download_exec_vbscmd/windows/generic -> cmd/windows/execcmd/windows/reverse_lua -> cmd/windows/shell_reverse_tcp_luacmd/windows/reverse_perl -> cmd/windows/shell_reverse_tcp_perlcmd/windows/reverse_ruby -> cmd/windows/shell_reverse_tcp_rubyChanging module names always entails a backwards compatibility issue.
I think consistency across platforms and architectures is more important and will result in less confusion overall.